SpringBoot从数据库加载配置信息

简介: 版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82811803 ...
版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82811803

Spring Boot 通过@Value注解可实现获取配置文件中的数据,而配置文件中的数据可以通过修改MutablePropertySources从数据库注入
该示例基于Hibernate实现

更多精彩

实体类

  1. 根据Hibernate的配置,实体类对应数据库中的表即可
@Entity
@Table(name = "sys_config")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Config implements Serializable {

    @Id
    private Long id;

    @Column
    private String code;

    @Column
    private String value;

    @Column
    private String name;

    @Column
    private String description;

  ...
}

服务类

  1. 服务类用于从数据库中获取列表信息
@Service
public class SystemConfigService extends SimpleHibernateService<Config, Long> {
   ...
}

配置类

  1. 该配置类会在系统启动时自动加载
  2. 根据内部逻辑会将从数据库取出的列表信息注入到MutablePropertySources属性集合中
  3. 动态注入的属性集合无需有对应的 .properties 文件存在
@Configuration
public class SystemConfig {

    @Autowired
    private ConfigurableEnvironment environment;

    @Autowired
    private SystemConfigService service;

    @PostConstruct
    public void initDatabasePropertySourceUsage() {
        // 获取系统属性集合
        MutablePropertySources propertySources = environment.getPropertySources();

        try {
            // 从数据库获取自定义变量列表
            Map<String, String> collect = service.getAll().stream().collect(Collectors.toMap(Config::getCode, Config::getValue));

            // 将转换后的列表加入属性中
            Properties properties = new Properties();
            properties.putAll(collect);

            // 将属性转换为属性集合,并指定名称
            PropertiesPropertySource constants = new PropertiesPropertySource("system-config", properties);

            // 定义寻找属性的正则,该正则为系统默认属性集合的前缀
            Pattern p = Pattern.compile("^applicationConfig.*");

            // 接收系统默认属性集合的名称
            String name = null;
            // 标识是否找到系统默认属性集合
            boolean flag = false;

            // 遍历属性集合
            for (PropertySource<?> source : propertySources) {
                // 正则匹配
                if (p.matcher(source.getName()).matches()) {
                    // 接收名称
                    name = source.getName();
                    // 变更标识
                    flag = true;

                    break;
                }
            }

            if (flag) {
                // 找到则将自定义属性添加到该属性之前
                propertySources.addBefore(name, constants);
            } else {
                // 没找到默认添加到第一位
                propertySources.addFirst(constants);
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}

工具类

  1. 由于Spring Boot不支持静态变量的自动注入,所以需要使用一个非静态的setter方法将通过**@Value**注解获取到的属性信息赋值给对应静态变量
  2. @DependsOn({"systemConfig"}) 的意思是说 Constants 依赖于 SystemConfig ,所以需要确保 SystemConfig 在 Constants 之前加载
@Configuration
@DependsOn({"systemConfig"})
public class Constants {

    // 资源服务器地址
    public static String RESOURCE_SERVER_URL;

    @Value("${resource.server.url}")
    public void setResourceServerUrl(String resourceServerUrl) {
        RESOURCE_SERVER_URL = resourceServerUrl;
    }
}
目录
相关文章
|
24天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
63 6
|
24天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue的班级综合测评管理系统设计与实现(系统源码+文档+数据库+部署等)
✌免费选题、功能需求设计、任务书、开题报告、中期检查、程序功能实现、论文辅导、论文降重、答辩PPT辅导、会议视频一对一讲解代码等✌
40 4
|
24天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
37 2
|
29天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
52 2
|
24天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的冬奥会科普平台设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
41 0
|
3月前
|
Java 关系型数据库 数据库连接
使用 Spring Boot 执行数据库操作:全面指南
使用 Spring Boot 执行数据库操作:全面指南
303 1
|
3月前
|
数据库连接 Linux Shell
Linux下ODBC与 南大通用GBase 8s数据库的无缝连接配置指南
本文详细介绍在Linux系统下配置GBase 8s数据库ODBC的过程,涵盖环境变量设置、ODBC配置文件编辑及连接测试等步骤。首先配置数据库环境变量如GBASEDBTDIR、PATH等,接着修改odbcinst.ini和odbc.ini文件,指定驱动路径、数据库名称等信息,最后通过catalog.c工具或isql命令验证ODBC连接是否成功。
|
24天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
11天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
82 42
|
2天前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
40 25

热门文章

最新文章