• Springboot从数据库读取配置文件


    springboot常规的项目是直接读取resources/application.properties文件或者application.yml或者bootstrap.properties文件。还有常见的玩法是把nacos或eureka或zookeeper来实现远程读取配置文件。

    ----------------------------------------正文开始-------------------------------------------------

    今天我们在cloud的基础上从数据库读取配置文件信息。在开始之前,我们需要知道三个大的概念,springboot,spring-cloud-config-server,spring-cloud-starter-config。

    概念1,springboot是常规的java开发框架,这里不多说。

    概念2,spring-cloud-config-server,是在常规的springboot基础上,把这个项目变成一个config-server,这个config-server可以理解为就是把数据库的配置文件读取出来,然后其余的项目的配置文件只要请求的地址是这个地址就能读取到数据库的配置信息。还可以扩展到native,jdbc,git,svn。这里我们只讲jdbc的,其余的请自行研究。

    ----------------------------------------服务端  config server--------------------------------------

    1、新建一个普通的springboot项目,名字随便叫一个springboot-config-server。

    2、pom的配置文件如下,大家可以参照下,这里的重点是springboot的版本和spring-cloud的版本,自己要注意,版本不兼容也会导致启动失败。本文的版本是经过测试和验证可用的版本。

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0</modelVersion>
    6. <groupId>cn.renkai721</groupId>
    7. <artifactId>ncs</artifactId>
    8. <version>1.0.0</version>
    9. <packaging>jar</packaging>
    10. <name>ncs</name>
    11. <parent>
    12. <groupId>org.springframework.boot</groupId>
    13. <artifactId>spring-boot-starter-parent</artifactId>
    14. <version>2.4.2</version>
    15. <relativePath/>
    16. </parent>
    17. <properties>
    18. <encoding>UTF-8</encoding>
    19. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    20. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    21. <java.version>1.8</java.version>
    22. <maven.compiler.source>${java.version}</maven.compiler.source>
    23. <maven.compiler.target>${java.version}</maven.compiler.target>
    24. <lombok.version>1.18.0</lombok.version>
    25. <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    26. </properties>
    27. <repositories>
    28. <!--阿里云仓库 -->
    29. <repository>
    30. <id>aliyun</id>
    31. <url>https://maven.aliyun.com/repository/public/</url>
    32. </repository>
    33. </repositories>
    34. <dependencies>
    35. <!-- Spring Boot Web 依赖 -->
    36. <dependency>
    37. <groupId>org.springframework.boot</groupId>
    38. <artifactId>spring-boot-starter-web</artifactId>
    39. </dependency>
    40. <!-- 配置文件从数据库读取 -->
    41. <dependency>
    42. <groupId>org.springframework.cloud</groupId>
    43. <artifactId>spring-cloud-config-server</artifactId>
    44. <version>3.0.6</version>
    45. </dependency>
    46. <dependency>
    47. <groupId>org.springframework.boot</groupId>
    48. <artifactId>spring-boot-starter-jdbc</artifactId>
    49. </dependency>
    50. <dependency>
    51. <groupId>mysql</groupId>
    52. <artifactId>mysql-connector-java</artifactId>
    53. <version>8.0.11</version>
    54. </dependency>
    55. <!-- 数据库连接池 -->
    56. <dependency>
    57. <groupId>com.alibaba</groupId>
    58. <artifactId>druid</artifactId>
    59. <version>1.2.6</version>
    60. </dependency>
    61. <!-- config server需要用户名和密码才可以访问 -->
    62. <dependency>
    63. <groupId>org.springframework.boot</groupId>
    64. <artifactId>spring-boot-starter-security</artifactId>
    65. </dependency>
    66. </dependencies>
    67. <build>
    68. <plugins>
    69. <plugin>
    70. <groupId>org.springframework.boot</groupId>
    71. <artifactId>spring-boot-maven-plugin</artifactId>
    72. <configuration>
    73. <mainClass>cn.renkai721.NcsApplication</mainClass>
    74. </configuration>
    75. </plugin>
    76. </plugins>
    77. </build>
    78. </project>

    3、新建一个NcsApplication.java文件,这个项目下只有这一个文件。注意必须导入@EnableConfigServer。

    1. package cn.renkai721;
    2. import org.springframework.boot.SpringApplication;
    3. import org.springframework.boot.autoconfigure.SpringBootApplication;
    4. import org.springframework.cloud.config.server.EnableConfigServer;
    5. @SpringBootApplication
    6. @EnableConfigServer
    7. public class NcsApplication {
    8. public static void main(String[] args) {
    9. SpringApplication.run(NcsApplication.class, args);
    10. System.out.println("naturobot-config-server项目启动成功!");
    11. }
    12. }
    4、新建一个application.properties文件。
    # active selection value=native、jdbc、git、svn
    # 如果是从数据库读取,这里必须是jdbc
    1. server.servlet.context-path=/ncs
    2. spring.application.name=ncs
    3. # active selection value=native、jdbc、git、svn
    4. # 如果是从数据库读取,这里必须是jdbc
    5. spring.profiles.active=jdbc
    6. #test
    7. server.port=9092
    8. spring.datasource.url=jdbc:mysql://192.168.1.123:3306/springbootconfig?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true
    9. spring.datasource.username=root
    10. spring.datasource.password=123456
    11. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    12. spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    13. spring.datasource.initialSize=1
    14. spring.datasource.minIdle=3
    15. spring.datasource.maxActive=20
    16. spring.datasource.maxWait=60000
    17. spring.datasource.timeBetweenEvictionRunsMillis=60000
    18. spring.datasource.minEvictableIdleTimeMillis=30000
    19. spring.datasource.testWhileIdle=true
    20. spring.datasource.testOnBorrow=false
    21. spring.datasource.testOnReturn=false
    22. spring.datasource.validationQuery=select 1
    23. spring.jpa.hibernate.ddl-auto=update
    24. # 下面的关键配置
    25. spring.cloud.config.label=master
    26. spring.cloud.config.server.jdbc=true
    27. # 动态从数据库读取配置信息
    28. spring.cloud.config.server.jdbc.sql=SELECT propname, propvalue from config_properties where application=? and profile=? and label=? and isdel=0
    29. #访问该服务需要用户名和密码
    30. # config server username and password
    31. spring.security.user.name=admin
    32. spring.security.user.password=admin

    5、数据库脚本

    1. CREATE TABLE `config_properties` (
    2. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    3. `propname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '配置文件的key',
    4. `propvalue` varchar(500) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '配置文件的value',
    5. `application` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '对应访问地址中的config-server',
    6. `profile` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'dev开发环境配置文件,test测试环境,prod正式环境',
    7. `label` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '指明远程仓库的分支',
    8. `isdel` int DEFAULT '0' COMMENT '是否删除,1=删除,0=没有删除,可用',
    9. PRIMARY KEY (`id`)
    10. ) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin COMMENT='springboot项目从数据库读取配置文件';

    6、数据库脚本数据

    1. -- ----------------------------
    2. -- Records of config_properties
    3. -- ----------------------------
    4. INSERT INTO `config_properties` VALUES (1, 'server.servlet.context-path', '/qywxzj', 'qywxzj', 'test', 'master', 0);
    5. INSERT INTO `config_properties` VALUES (2, 'server.port', '9091', 'qywxzj', 'test', 'master', 0);
    6. INSERT INTO `config_properties` VALUES (3, 'server.servlet.jsp.init-parameters.development', 'TRUE', 'qywxzj', 'test', 'master', 0);
    7. INSERT INTO `config_properties` VALUES (4, 'server.tomcat.uri-encoding', 'UTF-8', 'qywxzj', 'test', 'master', 0);
    8. INSERT INTO `config_properties` VALUES (5, 'server.servlet.session.timeout', '7200', 'qywxzj', 'test', 'master', 0);
    9. INSERT INTO `config_properties` VALUES (6, 'logging.level.org.springframework.web', 'ERROR', 'qywxzj', 'test', 'master', 0);
    10. INSERT INTO `config_properties` VALUES (7, 'logging.level.com.github.binarywang.demo.wx.cp', 'INFO', 'qywxzj', 'test', 'master', 0);
    11. INSERT INTO `config_properties` VALUES (8, 'logging.level.me.chanjar.weixin', 'INFO', 'qywxzj', 'test', 'master', 0);
    12. INSERT INTO `config_properties` VALUES (9, 'myApp.server', 'http://192.168.1.120:9091/qywxzj/', 'qywxzj', 'test', 'master', 0);
    13. INSERT INTO `config_properties` VALUES (10, 'server.servlet.encoding.force', 'TRUE', 'qywxzj', 'test', 'master', 0);
    14. INSERT INTO `config_properties` VALUES (11, 'server.servlet.encoding.charset', 'UTF-8', 'qywxzj', 'test', 'master', 0);
    15. INSERT INTO `config_properties` VALUES (12, 'server.servlet.encoding.enabled', 'TRUE', 'qywxzj', 'test', 'master', 0);
    16. INSERT INTO `config_properties` VALUES (13, 'spring.mvc.view.prefix', '/WEB-INF/views/', 'qywxzj', 'test', 'master', 0);
    17. INSERT INTO `config_properties` VALUES (14, 'spring.mvc.view.suffix', '.jsp', 'qywxzj', 'test', 'master', 0);
    18. INSERT INTO `config_properties` VALUES (15, 'spring.thymeleaf.cache', 'FALSE', 'qywxzj', 'test', 'master', 0);
    19. INSERT INTO `config_properties` VALUES (16, 'spring.thymeleaf.enabled', 'FALSE', 'qywxzj', 'test', 'master', 0);
    20. INSERT INTO `config_properties` VALUES (17, 'spring.jpa.database', 'MYSQL', 'qywxzj', 'test', 'master', 0);
    21. INSERT INTO `config_properties` VALUES (18, 'spring.datasource.driver-class-name', 'com.mysql.cj.jdbc.Driver', 'qywxzj', 'test', 'master', 0);
    22. INSERT INTO `config_properties` VALUES (19, 'spring.datasource.url', 'jdbc:mysql://192.168.1.123:3306/student?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true', 'qywxzj', 'test', 'master', 0);
    23. INSERT INTO `config_properties` VALUES (20, 'spring.datasource.username', 'root', 'qywxzj', 'test', 'master', 0);
    24. INSERT INTO `config_properties` VALUES (21, 'spring.datasource.password', '123456', 'qywxzj', 'test', 'master', 0);
    25. INSERT INTO `config_properties` VALUES (22, 'spring.datasource.type', 'com.alibaba.druid.pool.DruidDataSource', 'qywxzj', 'test', 'master', 0);
    26. INSERT INTO `config_properties` VALUES (23, 'spring.datasource.initialSize', '1', 'qywxzj', 'test', 'master', 0);
    27. INSERT INTO `config_properties` VALUES (24, 'spring.datasource.minIdle', '3', 'qywxzj', 'test', 'master', 0);
    28. INSERT INTO `config_properties` VALUES (25, 'spring.datasource.maxActive', '20', 'qywxzj', 'test', 'master', 0);
    29. INSERT INTO `config_properties` VALUES (26, 'spring.datasource.maxWait', '60000', 'qywxzj', 'test', 'master', 0);
    30. INSERT INTO `config_properties` VALUES (27, 'spring.datasource.timeBetweenEvictionRunsMillis', '60000', 'qywxzj', 'test', 'master', 0);
    31. INSERT INTO `config_properties` VALUES (28, 'spring.datasource.minEvictableIdleTimeMillis', '30000', 'qywxzj', 'test', 'master', 0);
    32. INSERT INTO `config_properties` VALUES (29, 'spring.datasource.validationQuery', 'select \'x\'', 'qywxzj', 'test', 'master', 0);
    33. INSERT INTO `config_properties` VALUES (30, 'spring.datasource.testWhileIdle', 'TRUE', 'qywxzj', 'test', 'master', 0);
    34. INSERT INTO `config_properties` VALUES (31, 'spring.datasource.testOnBorrow', 'FALSE', 'qywxzj', 'test', 'master', 0);
    35. INSERT INTO `config_properties` VALUES (32, 'spring.datasource.testOnReturn', 'FALSE', 'qywxzj', 'test', 'master', 0);
    36. INSERT INTO `config_properties` VALUES (33, 'spring.jpa.hibernate.ddl-auto', 'update', 'qywxzj', 'test', 'master', 0);
    37. INSERT INTO `config_properties` VALUES (34, 'mybatis-plus.type-aliases-package', 'cn.renkai721.*.*Entity', 'qywxzj', 'test', 'master', 0);
    38. INSERT INTO `config_properties` VALUES (35, 'mybatis-plus.global-config.id-type', '0', 'qywxzj', 'test', 'master', 0);
    39. INSERT INTO `config_properties` VALUES (36, 'mybatis-plus.global-config.field-strategy', '2', 'qywxzj', 'test', 'master', 0);
    40. INSERT INTO `config_properties` VALUES (37, 'mybatis-plus.global-config.db-column-underline', 'TRUE', 'qywxzj', 'test', 'master', 0);
    41. INSERT INTO `config_properties` VALUES (38, 'mybatis-plus.global-config.refresh-mapper', 'TRUE', 'qywxzj', 'test', 'master', 0);
    42. INSERT INTO `config_properties` VALUES (39, 'mybatis-plus.configuration.map-underscore-to-camel-case', 'FALSE', 'qywxzj', 'test', 'master', 0);
    43. INSERT INTO `config_properties` VALUES (40, 'mybatis-plus.configuration.cache-enabled', 'FALSE', 'qywxzj', 'test', 'master', 0);
    44. INSERT INTO `config_properties` VALUES (41, 'mybatis-plus.configuration.call-setters-on-nulls', 'TRUE', 'qywxzj', 'test', 'master', 0);
    45. INSERT INTO `config_properties` VALUES (42, 'mybatis-plus.global-config.db-config.id-type', 'id_worker', 'qywxzj', 'test', 'master', 0);
    46. INSERT INTO `config_properties` VALUES (43, 'mybatis-plus.mapper-locations', 'classpath*:mapper/*Mapper.xml', 'qywxzj', 'test', 'master', 0);
    47. INSERT INTO `config_properties` VALUES (44, 'redisson.singleServerConfig.address', '192.168.1.124:6380', 'qywxzj', 'test', 'master', 0);
    48. INSERT INTO `config_properties` VALUES (45, 'redisson.singleServerConfig.database', '6', 'qywxzj', 'test', 'master', 0);
    49. INSERT INTO `config_properties` VALUES (46, 'redisson.password', '123456', 'qywxzj', 'test', 'master', 0);
    50. INSERT INTO `config_properties` VALUES (47, 'redisson.model', 'SINGLE', 'qywxzj', 'test', 'master', 0);
    51. INSERT INTO `config_properties` VALUES (48, 'springfox.documentation.swagger.use-model-v3', 'FALSE', 'qywxzj', 'test', 'master', 0);
    52. INSERT INTO `config_properties` VALUES (49, 'spring.mvc.pathmatch.matching-strategy', 'ant_path_matcher', 'qywxzj', 'test', 'master', 0);
    53. INSERT INTO `config_properties` VALUES (50, 'management.endpoints.web.exposure.include', '\'*\'', 'qywxzj', 'test', 'master', 0);
    54. INSERT INTO `config_properties` VALUES (51, 'server.tomcat.basedir', 'qywxzj', 'qywxzj', 'test', 'master', 0);
    55. INSERT INTO `config_properties` VALUES (52, 'server.tomcat.accesslog.enabled', 'TRUE', 'qywxzj', 'test', 'master', 0);
    56. INSERT INTO `config_properties` VALUES (53, 'server.tomcat.accesslog.pattern', '%t [%I] %{X-Forwarded-For}i %a \'%r\' %s (%D ms)', 'qywxzj', 'test', 'master', 0);
    57. INSERT INTO `config_properties` VALUES (54, 'boiler.quartz.corePoolSize', '10', 'qywxzj', 'test', 'master', 0);
    58. INSERT INTO `config_properties` VALUES (55, 'boiler.quartz.maxPoolSize', '30', 'qywxzj', 'test', 'master', 0);
    59. INSERT INTO `config_properties` VALUES (56, 'boiler.quartz.queueCapacity', '40', 'qywxzj', 'test', 'master', 0);
    60. INSERT INTO `config_properties` VALUES (57, 'boiler.timeout.connectionRequestTimeout', '3000', 'qywxzj', 'test', 'master', 0);
    61. INSERT INTO `config_properties` VALUES (58, 'boiler.timeout.connectTimeout', '3000', 'qywxzj', 'test', 'master', 0);
    62. INSERT INTO `config_properties` VALUES (59, 'boiler.timeout.readTimeout', '6000', 'qywxzj', 'test', 'master', 0);
    63. INSERT INTO `config_properties` VALUES (60, 'ali.rocketmq.accessKeyId', 'LTAI5t9sdf33FDSFSVS', 'qywxzj', 'test', 'master', 0);
    64. INSERT INTO `config_properties` VALUES (61, 'ali.rocketmq.accessKeySecret', 'C73svKpdfgdfg646GFDGDsx2kwba7H7CYJvbPq', 'qywxzj', 'test', 'master', 0);
    65. INSERT INTO `config_properties` VALUES (62, 'ali.rocketmq.endpoint', 'http://1235689754123656.mqrest.cn-shanghai.aliyuncs.com', 'qywxzj', 'test', 'master', 0);
    66. INSERT INTO `config_properties` VALUES (63, 'ali.rocketmq.qwzj.topic', 'qywx_selfMessage', 'qywxzj', 'test', 'master', 0);
    67. INSERT INTO `config_properties` VALUES (64, 'ali.rocketmq.qwzj.consumerGroupName', 'GID_selfsf', 'qywxzj', 'test', 'master', 0);
    68. INSERT INTO `config_properties` VALUES (65, 'ali.rocketmq.qwzj.instanceId', 'MQ_INST_6464s6df6646werew_BYET1yoq', 'qywxzj', 'test', 'master', 0);
    69. INSERT INTO `config_properties` VALUES (66, 'spring.main.allow-bean-definition-overriding', 'true', 'qywxzj', 'test', 'master', 0);

    7、然后启动server-config项目。在浏览器输入http://localhost:9092/ncs/qywxzj/test/master,然后输入admin/admin。就会看到从数据库中读取到的配置文件。返回的json如下。

    SQL说明

    SELECT KEY, VALUE from PROPERTIES where APPLICATION=? and PROFILE=? and LABEL=?

    第一个?: 对应访问地址中的config-server

    第二个?: 对应访问地址中的dev,test,prod等

    第三个?: 可以为空,可以用来表示版本号

    1. {
    2. "name": "qywxzj",
    3. "profiles": [
    4. "test"
    5. ],
    6. "label": "master",
    7. "version": null,
    8. "state": null,
    9. "propertySources": [
    10. {
    11. "name": "qywxzj-test",
    12. "source": {
    13. "server.servlet.context-path": "/qywxzj",
    14. "server.port": "9091",
    15. "server.servlet.jsp.init-parameters.development": "TRUE",
    16. "server.tomcat.uri-encoding": "UTF-8",
    17. "server.servlet.session.timeout": "7200",
    18. "logging.level.org.springframework.web": "ERROR",
    19. "logging.level.com.github.binarywang.demo.wx.cp": "INFO",
    20. "logging.level.me.chanjar.weixin": "INFO",
    21. "myApp.server": "http://192.168.1.120:9091/qywxzj/",
    22. "server.servlet.encoding.force": "TRUE",
    23. "server.servlet.encoding.charset": "UTF-8",
    24. "server.servlet.encoding.enabled": "TRUE",
    25. "spring.mvc.view.prefix": "/WEB-INF/views/",
    26. "spring.mvc.view.suffix": ".jsp",
    27. "spring.thymeleaf.cache": "FALSE",
    28. "spring.thymeleaf.enabled": "FALSE",
    29. "spring.jpa.database": "MYSQL",
    30. "spring.datasource.driver-class-name": "com.mysql.cj.jdbc.Driver",
    31. "spring.datasource.url": "jdbc:mysql://192.168.1.123:3306/student?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true",
    32. "spring.datasource.username": "root",
    33. "spring.datasource.password": "123456",
    34. "spring.datasource.type": "com.alibaba.druid.pool.DruidDataSource",
    35. "spring.datasource.initialSize": "1",
    36. "spring.datasource.minIdle": "3",
    37. "spring.datasource.maxActive": "20",
    38. "spring.datasource.maxWait": "60000",
    39. "spring.datasource.timeBetweenEvictionRunsMillis": "60000",
    40. "spring.datasource.minEvictableIdleTimeMillis": "30000",
    41. "spring.datasource.validationQuery": "select 'x'",
    42. "spring.datasource.testWhileIdle": "TRUE",
    43. "spring.datasource.testOnBorrow": "FALSE",
    44. "spring.datasource.testOnReturn": "FALSE",
    45. "spring.jpa.hibernate.ddl-auto": "update",
    46. "mybatis-plus.type-aliases-package": "cn.renkai721.*.*Entity",
    47. "mybatis-plus.global-config.id-type": "0",
    48. "mybatis-plus.global-config.field-strategy": "2",
    49. "mybatis-plus.global-config.db-column-underline": "TRUE",
    50. "mybatis-plus.global-config.refresh-mapper": "TRUE",
    51. "mybatis-plus.configuration.map-underscore-to-camel-case": "FALSE",
    52. "mybatis-plus.configuration.cache-enabled": "FALSE",
    53. "mybatis-plus.configuration.call-setters-on-nulls": "TRUE",
    54. "mybatis-plus.global-config.db-config.id-type": "id_worker",
    55. "mybatis-plus.mapper-locations": "classpath*:mapper/*Mapper.xml",
    56. "redisson.singleServerConfig.address": "192.168.1.124:6380",
    57. "redisson.singleServerConfig.database": "6",
    58. "redisson.password": "123456",
    59. "redisson.model": "SINGLE",
    60. "springfox.documentation.swagger.use-model-v3": "FALSE",
    61. "spring.mvc.pathmatch.matching-strategy": "ant_path_matcher",
    62. "management.endpoints.web.exposure.include": "'*'",
    63. "server.tomcat.basedir": "qywxzj",
    64. "server.tomcat.accesslog.enabled": "TRUE",
    65. "server.tomcat.accesslog.pattern": "%t [%I] %{X-Forwarded-For}i %a '%r' %s (%D ms)",
    66. "boiler.quartz.corePoolSize": "10",
    67. "boiler.quartz.maxPoolSize": "30",
    68. "boiler.quartz.queueCapacity": "40",
    69. "boiler.timeout.connectionRequestTimeout": "3000",
    70. "boiler.timeout.connectTimeout": "3000",
    71. "boiler.timeout.readTimeout": "6000",
    72. "ali.rocketmq.accessKeyId": "LTAI5t9sdf33FDSFSVS",
    73. "ali.rocketmq.accessKeySecret": "C73svKpdfgdfg646GFDGDsx2kwba7H7CYJvbPq",
    74. "ali.rocketmq.endpoint": "http://1235689754123656.mqrest.cn-shanghai.aliyuncs.com",
    75. "ali.rocketmq.qwzj.topic": "qywx_selfMessage",
    76. "ali.rocketmq.qwzj.consumerGroupName": "GID_selfsf",
    77. "ali.rocketmq.qwzj.instanceId": "MQ_INST_6464s6df6646werew_BYET1yoq",
    78. "spring.main.allow-bean-definition-overriding": "true"
    79. }
    80. }
    81. ]
    82. }

    ----------------------------------------服务端  config client--------------------------------------

    1、新建一个普通的springboot项目,名字随便叫一个springboot-config-client。这个client只是一个概念,就是你需要用的实际的项目,刚才的server只是做一个从数据库读取配置文件的服务而已,因为你自己不能直接读取数据库,所以需要它来中转一下。

    2、pom.xml文件依赖的jar。

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0</modelVersion>
    6. <groupId>cn.renkai721</groupId>
    7. <artifactId>qywxzj</artifactId>
    8. <version>1.0.0</version>
    9. <packaging>jar</packaging>
    10. <name>qywxzj</name>
    11. <parent>
    12. <groupId>org.springframework.boot</groupId>
    13. <artifactId>spring-boot-starter-parent</artifactId>
    14. <version>2.4.2</version>
    15. <relativePath/>
    16. <properties>
    17. <encoding>UTF-8</encoding>
    18. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    19. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    20. <java.version>1.8</java.version>
    21. <maven.compiler.source>${java.version}</maven.compiler.source>
    22. <maven.compiler.target>${java.version}</maven.compiler.target>
    23. <lombok.version>1.18.0</lombok.version>
    24. <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    25. </properties>
    26. <repositories>
    27. <!--阿里云仓库 -->
    28. <repository>
    29. <id>aliyun</id>
    30. <url>https://maven.aliyun.com/repository/public/</url>
    31. </repository>
    32. </repositories>
    33. <dependencies>
    34. <!-- Spring Boot Web 依赖 -->
    35. <dependency>
    36. <groupId>org.springframework.boot</groupId>
    37. <artifactId>spring-boot-starter-web</artifactId>
    38. </dependency>
    39. <dependency>
    40. <groupId>mysql</groupId>
    41. <artifactId>mysql-connector-java</artifactId>
    42. <version>8.0.11</version>
    43. </dependency>
    44. <!-- 数据库连接池 -->
    45. <dependency>
    46. <groupId>com.alibaba</groupId>
    47. <artifactId>druid</artifactId>
    48. <version>1.2.6</version>
    49. </dependency>
    50. <dependency>
    51. <groupId>org.springframework.cloud</groupId>
    52. <artifactId>spring-cloud-starter-config</artifactId>
    53. <version>3.0.6</version>
    54. </dependency>
    55. <--如果springboot的版本是2.1.6.RELEASE,就不需要下面的bootstrap依赖 -->
    56. <--springboot2.1.6.RELEASE,对应spring-cloud-starter-config版本2.0.0.RELEASE -->
    57. <dependency>
    58. <groupId>org.springframework.cloud</groupId>
    59. <artifactId>spring-cloud-starter-bootstrap</artifactId>
    60. <version>3.1.0</version>
    61. </dependency>
    62. </dependencies>
    63. <build>
    64. <finalName>qywxzj</finalName>
    65. <plugins>
    66. <plugin>
    67. <groupId>org.springframework.boot</groupId>
    68. <artifactId>spring-boot-maven-plugin</artifactId>
    69. </plugin>
    70. </plugins>
    71. </build>
    72. </project>

    3、resource/bootstrap.properties文件配置如下。这里必须要注意,不能使用application.properties,否则系统是无法读取到配置信息的,原因未知。

    1. # read mysql db
    2. spring.application.name=qywxzj
    3. ## quote config server
    4. spring.cloud.config.uri=http://localhost:9092/ncs
    5. spring.cloud.config.fail-fast=true
    6. spring.cloud.config.name=qywxzj
    7. spring.cloud.config.label=master
    8. spring.cloud.config.profile=test
    9. spring.cloud.config.username=admin
    10. spring.cloud.config.password=admin

    4、启动类上必须添加@EnableDiscoveryClient

    1. package cn.renkai721;
    2. import org.mybatis.spring.annotation.MapperScan;
    3. import org.springframework.boot.SpringApplication;
    4. import org.springframework.boot.autoconfigure.SpringBootApplication;
    5. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    6. import org.springframework.transaction.annotation.EnableTransactionManagement;
    7. import lombok.extern.slf4j.Slf4j;
    8. import springfox.documentation.oas.annotations.EnableOpenApi;
    9. @SpringBootApplication(scanBasePackages = "cn.renkai721")
    10. @EnableTransactionManagement
    11. @MapperScan("cn.**.dao")
    12. @Slf4j
    13. @EnableOpenApi
    14. @EnableDiscoveryClient
    15. public class QywxzjApplication {
    16. public static void main(String[] args) {
    17. SpringApplication.run(QywxzjApplication.class, args);
    18. log.info("swagger api=http://ip:port/qywxzj/swagger-ui.html");
    19. log.info("swagger api=http://ip:port/qywxzj/doc.html");
    20. }
    21. }

    5、新建一个配置文件类。

    1. package cn.renkai721.configuration;
    2. import lombok.Data;
    3. import org.springframework.beans.factory.annotation.Value;
    4. import org.springframework.cloud.context.config.annotation.RefreshScope;
    5. import org.springframework.context.annotation.Configuration;
    6. import org.springframework.stereotype.Component;
    7. @Configuration
    8. @Data
    9. @Component
    10. public class QywxProperties {
    11. // 第三方应用
    12. public static String myApp = "myApp";
    13. @Value("${myApp.server}")
    14. private String myAppServer;
    15. @Value("${ali.rocketmq.qwzj.instanceId}")
    16. private String instanceId;
    17. @Value("${ali.rocketmq.qwzj.topic}")
    18. private String topic;
    19. }

    6、新建一个controller测试。

    1. package cn.renkai721.controller;
    2. import javax.annotation.Resource;
    3. import javax.servlet.http.HttpSession;
    4. import cn.renkai721.configuration.QywxProperties;
    5. import lombok.extern.slf4j.Slf4j;
    6. import org.springframework.stereotype.Controller;
    7. import springfox.documentation.annotations.ApiIgnore;
    8. @Controller
    9. @Slf4j
    10. public class IndexController {
    11. @Resource
    12. private QywxProperties qywxProperties;
    13. @ApiIgnore
    14. @RequestMapping(value = "/testDiZhi", method = RequestMethod.GET)
    15. @ResponseBody
    16. public String testDiZhi() {
    17. String callback = qywxProperties.getMyAppServer();
    18. return callback;
    19. }
    20. }

    7、在浏览器输入http://localhost:9091/qywxzj/testDiZhi,返回如下

    http://192.168.1.120:9091/qywxzj/

    --------------------------------------到此,springboot+springcloud从数据库读取配置文件结束

    --------------------------------------扩展

    1、如果需要从svn,git读取配置文件的,自行了解。建议使用springboot+nacos,这样比较方便简单。

    2、参照地址如下

    SpringBoot ConfigServer配置中心 | 无业游民

    spring cloud config将配置存储在数据库中-蒲公英云

    springboot-config-Server配置文件服务搭建_孟海滨的博客-CSDN博客

  • 相关阅读:
    没有杯子的世界:OOP设计思想的应用实践
    免费 AI 编程助手 Amazon CodeWhisperer 体验
    云计算 - 以阿里云为例,企业上云策略全览与最佳实践
    YOLOv5-PTQ量化部署
    深入浅出mybatis分页
    三个线程交替打印的几种实现方式
    OpenShift 4 - 用 Operator 部署 Redis 集群
    EelasticSearch使用!!!
    c#将int转为中文数字
    Flink SQL 在kerberos on yarn环境下提交
  • 原文地址:https://blog.csdn.net/renkai721/article/details/125529433