前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单体项目中内置spring-cloud-config并使用mysql存储配置

单体项目中内置spring-cloud-config并使用mysql存储配置

作者头像
零云
发布2023-07-24 21:30:44
3290
发布2023-07-24 21:30:44
举报

简介随着微服务的流行,越来越多的项目开始使用配置中心来管理项目中复杂的配置,但是也有很多项目仍然在使用单体式架构,那么单体架构如何内置一个配置中心便于随时在后台修改配置呢。

1.依赖引入

代码语言:javascript
复制
<!-- 健康管理 -->
<dependency>
      <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 内置配置中心,非微服务版 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
            <version>2.2.8.RELEASE</version>
        </dependency>
<!-- mysql数据库 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <!-- alibaba druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.9</version>
        </dependency>

2.\src\main\resources\META-INF下新建spring.factories文件,内容如下:

此步骤主要是为了在bootstrap启动阶段加载DataSource和Jdbc,因为我们要使用jdbc作为配置存储。

代码语言:javascript
复制
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration

3.\src\main\resources下新建bootstrap.yml文件,内容如下:

代码语言:javascript
复制
spring:
  application:
    name: summer # 必须在这里配置name
  profiles:
    active: dev,composite # 使用内置配置中心,生产打包时需要把dev改为prod
  cloud:
    config:
      label: main
      fail-fast: true
      server:
        prefix: /config
        bootstrap: true
        composite:
        - 
          type: jdbc
          sql: SELECT name, value from config_properties where APPLICATION=? and PROFILE=? and LABEL=?
          order: 1
  datasource:
    # Druid连接池配置
    type: com.alibaba.druid.pool.DruidDataSource
    # 初始化
    initialSize: 5
    # 最小
    minIdle: 5
    # 最大
    maxActive: 20
    # 最大连接等待超时时间
    maxWait: 60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    timeBetweenEvictionRunsMillis: 60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    # 打开PSCache,并且指定每个连接PSCache的大小
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    # 配置监控统计拦截的filters,去掉后监控界面sql将无法统计,'wall'用于防火墙
    filters: stat,wall,log4j2
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    useGlobalDataSourceStat: true

4.\src\main\resources下新建bootstrap-dev.yml文件,内容如下:

代码语言:javascript
复制
spring:
  # 因为配置中心使用jdbc作为存储,所以需要在bootstrap中配置数据库连接
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://xxx.com:3306/summer?characterEncoding=UTF-8&useSSL=true
    username: root
    password: 123456

5.\src\main\resources下新建bootstrap-prod.yml文件,内容如下:

这里是方便开发与生产使用不同的数据库。

代码语言:javascript
复制
spring:
  # 因为配置中心使用jdbc作为存储,所以需要在bootstrap中配置数据库连接
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://xxx.com:3306/summer_prod?characterEncoding=UTF-8&useSSL=true
    username: root
    password: 123456

6.新建数据表

代码语言:javascript
复制
CREATE TABLE `config_properties` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8_bin NOT NULL,
  `value` varchar(500) COLLATE utf8_bin DEFAULT NULL,
  `application` varchar(50) COLLATE utf8_bin NOT NULL,
  `profile` varchar(50) COLLATE utf8_bin NOT NULL,
  `label` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
INSERT INTO `config_properties` (`id`, `name`, `value`, `application`, `profile`, `label`) VALUES
(1, 'summer.site.title', '测试', 'yiju', 'dev', 'main');

7.删除application.yml、application-dev.yml、application-prod.yml中的datasource配置

如果您需要将配置和业务数据库分开,那么此步骤不需要执行。

8.在配置表中修改配置后不会立即执行,需要触发更新。

代码语言:javascript
复制
curl -X POST http://localhost:8080/actuator/refreshh   
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档