数据库中有状态有效的两行数据,想要的效果:在springboot启动的同时从数据库中加载一次获取到这两个配置设置到配置类SystemConfigProperties中,不写在配置文件中加载。

写这个配置文件SystemConfigProperties,最后数据库的值设置到configs上。
java
package com.cao.config;
import com.cao.po.SystemConfig;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Data
@Component
@ConfigurationProperties(prefix = "system.config")
public class SystemConfigProperties {
private List<SystemConfig> configs = new ArrayList<>();
}
写一个类SystemConfigLoader,实现 CommandLineRunner 接口,Spring Boot 会在应用启动完成后自动执行 run() 方法,从数据库配置信息设置到 SystemConfigProperties 中
java
package com.cao.config;
import com.cao.mapper.SystemConfigMapper;
import com.cao.po.SystemConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 使用 CommandLineRunner 接口,Spring Boot 会在应用启动完成后自动执行 run() 方法,从数据库加载配置。
*/
@Slf4j
@Component
public class SystemConfigLoader implements CommandLineRunner {
@Autowired
private SystemConfigMapper systemConfigMapper;
@Autowired
private SystemConfigProperties systemConfigProperties;
@Override
public void run(String... args) throws Exception {
log.info("开始加载系统配置...");
try {
List<SystemConfig> configs = systemConfigMapper.selectAllConfigs();
if (configs != null && !configs.isEmpty()) {
// 将配置信息设置到 SystemConfigProperties 中
systemConfigProperties.setConfigs(configs);
log.info("成功加载 {} 条系统配置", configs.size());
for (SystemConfig config : configs) {
log.info("加载配置: appId={}, appName={}, status={}", config.getAppId(), config.getAppName(), config.getStatus());
}
} else {
log.warn("未查询到任何系统配置数据");
}
} catch (Exception e) {
log.error("加载系统配置失败", e);
throw e;
}
}
}
SystemConfigMapper.java
java
package com.cao.mapper;
import com.cao.po.SystemConfig;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface SystemConfigMapper {
List<SystemConfig> selectAllConfigs();
}
SystemConfigMapper.xml
xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cao.mapper.SystemConfigMapper">
<resultMap id="SystemConfigResultMap" type="com.cao.po.SystemConfig">
<result column="app_id" property="appId"/>
<result column="app_name" property="appName"/>
<result column="app_key" property="appKey"/>
<result column="private_key" property="privateKey"/>
<result column="public_key" property="publicKey"/>
<result column="status" property="status"/>
</resultMap>
<select id="selectAllConfigs" resultMap="SystemConfigResultMap">
SELECT app_id, app_name, app_key, private_key, public_key, status
FROM system_config
WHERE status = 1
ORDER BY app_id
</select>
</mapper>
看控制台打印的日志

这样就在spring boot启动时候读取一遍数据库的配置信息,进行加载设置到SystemConfigProperties,比的地方使用直接注入SystemConfigProperties使用就行。