Что касается базового использования конфигурации Spring Cloud, это было упомянуто в предыдущем блоге. Если вы не понимаете, пожалуйста, сначала прочитайте предыдущий блог.
Spring Cloud Config интегрирует Gitlab для создания распределенного центра конфигурации
Высокая доступность распределенного конфигурационного конфигурационного центра Spring
Сегодня мы сосредоточены на том, как достичь горячего развертывания источников данных.
1. Настройте источник данных на клиенте
@Refreshscope @configuration // Настройка источника данных об открытом классе DataSourceConfigure {@bean @forreshscope // configuration file @configurationproperties (prefix = "spring.datasource") // prefix для автоматической конфигурации источника данных DataSource DataSource () {return DataSourcebuil.crate (). }} Через вышеуказанные шаги вы можете изменить файл конфигурации на Gitlab. После обновления сервер не нужно перезапустить, и новый источник данных вступит в силу.
2. Горячее развертывание пользовательских источников данных
Когда мы используем Spring Boot для интеграции Druid, нам нужно вручную настроить источник данных, код выглядит следующим образом:
пакет com.chhliu.springcloud.config; Импорт java.sql.sqlexception; импортировать javax.sql.datasource; Импорт org.springframework.beans.factory.annotation.value; Import org.springframework.cloud.context.config.annotation.refreshscope; Импорт org.springframework.context.annotation.bean; Импорт org.springframework.context.annotation.configuration; Импорт org.springframework.context.annotation.primary; импорт com.alibaba.druid.pool.druiddatasource; импортировать lombok.extern.slf4j.slf4j; / ** * * Описание: Если дат данных не инициализируется вручную с использованием кода, мониторинг интерфейса мониторинга не будет иметь данных (« - это ошибка пружины? @Value ("$ {spring.datasource.url}") частная строка dburl; @Value ("$ {Spring.datasource.username}") частная строка; @Value ("$ {spring.datasource.password}") Private String Password; @Value ("$ {spring.datasource.driverclassname}") private String DriverClassname; @Value ("$ {Spring.Datasource.initialSize}") private int initialSize; @Value ("$ {spring.datasource.minidle}") private int minidle; @Value ("$ {spring.datasource.maxactive}") private int maxactive; @Value ("$ {spring.datasource.maxwait}") private int maxwait; @Value ("$ {Spring.Datasource.TimeWeeWeedEvictionRunsmillis}") private int timeBowneEvictionRunsmillis; @Value ("$ {Spring.Datasource.mineVictableIdletImeMillis}") private int mineVictableIdletimemillis; @Value ("$ {spring.datasource.validationQuery}") Private String ValidationQuery; @Value ("$ {Spring.Datasource.testWhileIdle}") private Boolean TestWhileIdle; @Value ("$ {Spring.Datasource.testonBorw}") Private Boolean TestonBorrow; @Value ("$ {Spring.Datasource.testonborw}") частное логическое тестонерет; @Value ("$ {Spring.datasource.testonborrow}") частные логические бассейны; @Value ("$ {spring.datasource.maxpoolpreparedStatementPerconcection}") private int maxpoolpreparedStatementPerConcectionsize; @Value ("$ {spring.datasource.filters}") частные строковые фильтры; @Value ("$ {spring.datasource.connectionProperties}") private String ConnectionProperties; @Value ("$ {Spring.Datasource.UseGlobaldatasourcestat}") частное логическое использование kinglobaldatasourcestat; @Bean // объявить его как экземпляр Bean @primary // в том же данных, сначала используйте аннотированный DataSource @refreshscope public DataSource DataSource () {DruidDataSource dataSource = new DruidDataSource (); dataSource.seturl (this.dburl); dataSource.setuserName (имя пользователя); dataSource.setPassword (пароль); dataSource.setDriverClassName (DriverClassName); // configuration dataSource.setInitialSize (инициализация); dataSource.setMinidle (minidle); dataSource.setMactactive (maxactive); dataSource.setMaxWait (maxwait); dataSource.setTimeBetweeEvictionRunsmillis (TimeBhingWeeVictionRunsmillis); dataSource.SetMineVictableIdletimemillis (mineVictableIdletimemillis); dataSource.setValidationQuery (valyationQuery); dataSource.SetTestWhileIdle (тест -WhileIdle); dataSource.setTestonBorrow (testonBorrow); dataSource.setTestonReturn (testonReturn); dataSource.SetPoolPReparedStatements (PoolPRearedStatements); dataSource.SetMaxPoolPReparEdStateMentPerConnectionsize (maxpoolpreparedStatementPerconnectionsize); dataSource.setuseGlobaldatasourcestat (useglobaldatasourcestat); try {dataSource.setFilters (Filters); } catch (sqlexception e) {log.error ("Фильтр инициализации конфигурации друида:"+ e); } dataSource.setConnectionProperties (ConnectionProperties); вернуть DataSource; }} Через приведенный выше пример также может быть достигнуто динамическое обновление источников данных. Далее, давайте посмотрим, как Spring Cloud Config реализует горячее развертывание источников данных.
Из предыдущего блога нетрудно обнаружить, что для достижения динамического обновления ключевой момент заключается в запросе обновления после обновления, поэтому мы начинаем с обновления файла конфигурации.
Когда мы публикуем запрос обновления, запрос будет перехвачен модулем привода. Это можно увидеть из файла журнала запуска
Кода -копия выглядит следующим образом:
Сопоставлено "{[ /rebresh || /refresh.json^,,methods=tspost]}" на public java.lang.object org.springframework.cloud.endpoint.genericpostablemvcendpoint.invoke ()
Затем давайте посмотрим на конечную точку, определенную приведением, а затем мы находим класс ForreshendPoint. Исходный код этого класса заключается в следующем:
@ConfigurationProperties (prefix = "endpoints.refresh", ignoreunknownfields = false) @manageResource public class reveshendpoint extrableendpoint <collection <string >> {private contextrefresher contextrefresher; public refreshendpoint (contextrefresher contextrefresher) {super ("rebresh"); this.contextrefresher = contextrefresher; } @ManagedOperation public String [] refresh () {set <stry> keys = contextrefresher.refresh (); return keys.toarray (new String [keys.size ()]); } @Override public Collection <String> invoke () {return arrays.aslist (refresh ()); }}Из приведенного выше исходного кода мы видим, что основное внимание уделяется классу Contextrefreher. Поскольку этот класс слишком длинный, ниже приведен частичный исходный код этого класса:
Частный общий объем; public contextrefresher (configurableapplicationcontext context, refreshscope) {this.context = context; this.scope = scope; } public Synchronized set <strest> refresh () {map <string, object> перед = extract (this.context.getenvironment (). getPropertySources ()); // 1. До загрузки и извлечения файла конфигурации AddConfigFilestoEnvironment (); // 2. extract (this.context.getenvironment (). getPropertySources ())). keySet (); // 3. Замените значение в исходной переменной среды This.Context.PublishEvent (new EnvironmentChangeEvent (Keys)); // 4. Опубликовать событие изменения, this.scope.refreshall (); вернуть ключи; } Из приведенного выше кода нетрудно увидеть, что ключевые моменты прошли 4 шага и были отмечены в приведенном выше коде.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.