в предыдущем«Spring Cloud создает микросервисную архитектуру: распределенный центр конфигурации»В этой статье центр конфигурации Spring Cloud Server, который мы представили, использует Git для хранения информации о конфигурации. Этот дизайн умело использует собственный механизм Git и другие серверные продукты Git с богатыми функциями, поэтому Spring Cloud Server избегает многих сложных реализаций, связанных с управлением, в хранилище конфигурации и управлении, поэтому он имеет конфигурацию хранилища центра конфигурации. конфигурация и механизм управления верхнего уровня, поскольку он не является универсально применимым, Spring Cloud Server не реализует эту часть сам по себе, а обеспечивает часть реализации через серверный продукт Git, если это необходимо. Более сложные функции также могут быть реализованы. реализованы и определены сами по себе. Тем не менее, использование Git для хранения конфигурации в Spring Cloud Server по умолчанию вызывает споры. Поэтому в этой статье будет представлен новый метод настройки Spring Cloud Config из версии Edgware: использование базы данных для хранения информации о конфигурации.
Сервер центра конфигурации сборки
Шаг 1: Создайте базовый проект Spring Boot и добавьте несколько основных зависимостей в pom.xml:
-
spring-cloud-config-server
: Основные зависимости центра конфигурации -
spring-boot-starter-jdbc
: Поскольку вам нужно получить доступ к базе данных, вам нужно загрузить зависимости jdbc -
mysql-connector-java
: Пакет подключения к базе данных MySQL -
flyway-core
: этот контент не является обязательным и в основном используется для управления схемой (если вы не понимаете, вы можете посмотретьэта статья)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.11.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>5.0.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Шаг 2: Подготовьте схему для создания файла. существуетresources
Создать подschema
каталог и добавитьV1__Base_version.sql
файл, детали следующие:
CREATE TABLE `properties` (
`id` int(11) NOT NULL,
`key` varchar(50) NOT NULL,
`value` varchar(500) NOT NULL,
`application` varchar(50) NOT NULL,
`profile` varchar(50) NOT NULL,
`label` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Скрипт будет автоматически выполняться flyway при запуске программы
Шаг 3: Создайте основной класс приложения следующим образом:
@EnableConfigServer
@SpringBootApplication
public class ConfigServerBootstrap {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(ConfigServerBootstrap.class);
// 测试用数据,仅用于本文测试使用
JdbcTemplate jdbcTemplate = context.getBean(JdbcTemplate.class);
jdbcTemplate.execute("delete from properties");
jdbcTemplate.execute("INSERT INTO properties VALUES(1, 'com.didispace.message', 'test-stage-master', 'config-client', 'stage', 'master')");
jdbcTemplate.execute("INSERT INTO properties VALUES(2, 'com.didispace.message', 'test-online-master', 'config-client', 'online', 'master')");
jdbcTemplate.execute("INSERT INTO properties VALUES(3, 'com.didispace.message', 'test-online-develop', 'config-client', 'online', 'develop')");
jdbcTemplate.execute("INSERT INTO properties VALUES(4, 'com.didispace.message', 'hello-online-master', 'hello-service', 'online', 'master')");
jdbcTemplate.execute("INSERT INTO properties VALUES(5, 'com.didispace.message', 'hello-online-develop', 'hello-service', 'online', 'develop')");
}
}
Сюда добавляются некоторые тестовые данные, чтобы облегчить последующую проверку чтения конфигурации.
Шаг 4: Конфигурацияapplication.properties
, детали следующие:
spring.application.name=config-server-db
server.port=10020
spring.profiles.active=jdbc
spring.cloud.config.server.jdbc.sql=SELECT `KEY`, `VALUE` from PROPERTIES where APPLICATION=? and PROFILE=? and LABEL=?
spring.datasource.url=jdbc:mysql://localhost:3306/config-server-db
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
flyway.locations=/schema
Здесь задействовано несколько конфигураций:
-
spring.profiles.active=jdbc
: необходимо установить, чтобы переключить реализацию хранилища центра конфигурации на метод jdbc -
spring.cloud.config.server.jdbc.sql
: Не требуется, поскольку используется источник данных mysql,key
,value
Это зарезервированное ключевое слово, и исходный оператор реализации сообщит об ошибке, поэтому вам необходимо переписать этот оператор запроса (если дизайн сохраненной структуры таблицы отличается от содержимого, подготовленного выше, вы также можете изменить логику получения конфигурации с помощью конфигурации этого объекта) -
spring.datasource.*
: Конфигурация источника данных для хранения конфигурационной информации, здесь используется MySQL, и разработчик может изменить ее в соответствии со своей реальной ситуацией. -
flyway.locations
: место, где flyway загружает схему для создания sql.
Проверка конфигурации сервера
После завершения содержимого предыдущего раздела мы создали центр конфигурации, в котором содержимое конфигурации хранится через Data Cool. Далее мы можем попытаться прочитать конфигурацию через конечные точки, предоставляемые центром конфигурации.
Шаг 1: Запустите созданный выше центр конфигурации.
Шаг 2: Проверьте получение информации о конфигурации:
-
curl http://localhost:10020/config-client/stage/
,получение информацииconfig-client
Служитьstage
Содержимое конфигурации среды, в соответствии с приведенной выше подготовкой данных, мы получим следующее возвращаемое содержимое:
{
"name": "config-client",
"profiles": [
"stage"
],
"label": null,
"version": null,
"state": null,
"propertySources": [
{
"name": "config-client-stage",
"source": {
"com.didispace.message": "test-stage-master"
}
}
]
}
-
curl http://localhost:10020/hello-service/stage/develop
,получение информацииhello-service
Служить,stage
окружающая обстановка,develop
Содержимое конфигурации тега, в соответствии с приведенной выше подготовкой данных, мы получим следующее возвращаемое содержимое:
{
"name": "hello-service",
"profiles": [
"online"
],
"label": "develop",
"version": null,
"state": null,
"propertySources": [
{
"name": "hello-service-online",
"source": {
"com.didispace.message": "hello-online-develop"
}
}
]
}
Подробная информация о том, как получить доступ к центру конфигурации сборки Spring Cloud Config для получения информации о конфигурации. , вы можете просмотреть предыдущую статью:«Spring Cloud создает микросервисную архитектуру: распределенный центр конфигурации», который подробно не описан в этой статье.
Суммировать
Эта статья в основном знакомит с идеей использования хранилища JDBC, недавно добавленного в версию Spring Cloud Config для Edgware, На самом деле, есть еще много возможностей для оптимизации, таких как: оптимизация индекса, оптимизация оператора запроса; если дальнейшая настройка требуется Управление также необходимо для оптимизации структуры таблицы.
Наконец, компания AmwayПроект управления конфигурацией Spring Cloud Config:GitHub.com/first87112/tickets…, находится в стадии интенсивной разработки, с нетерпением ждем этого!
Пример этой статьи
Читатели могут выбрать следующие два склада для просмотра в соответствии со своими предпочтениями.config-server-db
а такжеconfig-client
Два проекта:
- Гитхаб: https://github.com/dyc87112/SpringCloud-Learning/
- Гити: https://gitee.com/didispace/SpringCloud-Learning/
Если вы заинтересованы в них, добро пожаловать, пометьте, подпишитесь, добавьте в избранное и вперед, чтобы поддержать!