Springboot手動でredisプロファイルをロードする
シーン:
問題のようにspringbootはプロファイルのロードファイルを手動でロードし、本プロジェクトのredisモジュールは別のプロジェクトからロードされ、別のプロジェクトで使用されます.
redis構成
redis構成は、プロファイル内のアプリケーション-x.ymlにあります.
redis構成クラスの読み込み
JedisPoolをゲット
JedisPoolによって具体的な接続が得られ、これまで様々な操作が行われてきた.
次の手順に従います.
実はそんなに考えていません.このredisServiceクラスにjedisPoolが必要である以上、@Bean方式でnewを出して、半日springbootを探して読みました.ymlファイルのツールクラス、springbootに付属のツールクラスがあることを発見しました
その後springbootには独自のredis読み出し構成クラスがあり、RedisProperties
問題のようにspringbootはプロファイルのロードファイルを手動でロードし、本プロジェクトのredisモジュールは別のプロジェクトからロードされ、別のプロジェクトで使用されます.
com.xiaoleilu
hutool-all
3.3.0
com.xiaoleilu.hutool.db.nosql.redis.RedisDS , , jar ,
redis構成
redis構成は、プロファイル内のアプリケーション-x.ymlにあります.
spring:
redis:
host: localhost
port: 6379
password: cloud #
timeout: 6000 # ( )
jedis.pool:
#jedis
maxTotal: 1024
#jedis idel
maxIdle: 200
#jedis ,
maxWaitMillis: 10000
testOnBorrow: true
testOnReturn: true
blockWhenExhausted: false
#Idle
testWhileIdle: true
# idle object evitor sleep
timeBetweenEvictionRunsMillis: 30000
# idle object evitor
numTestsPerEvictionRun: 10
# idle , idle object evitor ; timeBetweenEvictionRunsMillis 0
minEvictableIdleTimeMillis: 60000
redis構成クラスの読み込み
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.env.PropertySourcesLoader;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.ClassPathResource;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.io.IOException;
import java.util.LinkedHashMap;
/**
*
*
* redis , bean
*
*/
@Configuration
public class Config {
Logger logger = Logger.getLogger(this.getClass());
/**
*
*/
@Value("${spring.profiles.active}")
private String active;
/**
* @ConditionalOnMissingBean
*
* @return
*/
@ConditionalOnMissingBean
@Bean
public JedisPool jedisPool (JedisPoolConfig config,PropertySource> source) {
if(null != source) {
LinkedHashMap sourceMap = source.getSource();
JedisPool pool = new JedisPool(config, (String) sourceMap.get("spring.redis.host"),(Integer) sourceMap.get("spring.redis.port"),
(Integer) sourceMap.get("spring.redis.timeout"),(String) sourceMap.get("spring.redis.password"));
return pool;
}
// ,
logger.error(" JedisPool , JedisPool");
// localhost 6379
return new JedisPool();
}
@Bean
public JedisPoolConfig jedisConfig(PropertySource> source){
if(null != source ) {
LinkedHashMap sourceMap = source.getSource();
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle((Integer) sourceMap.get("spring.redis.jedis.pool.maxIdle"));
config.setMaxTotal((Integer)sourceMap.get("spring.redis.jedis.pool.maxTotal"));
config.setMaxWaitMillis(Long.valueOf(sourceMap.get("spring.redis.jedis.pool.maxWaitMillis").toString()));
config.setTestOnBorrow((Boolean)sourceMap.get("spring.redis.jedis.pool.testOnBorrow"));
config.setTestOnReturn((Boolean)sourceMap.get("spring.redis.jedis.pool.testOnReturn"));
config.setBlockWhenExhausted((Boolean)sourceMap.get("spring.redis.jedis.pool.blockWhenExhausted"));
config.setTestWhileIdle((Boolean)sourceMap.get("spring.redis.jedis.pool.testWhileIdle"));
config.setTimeBetweenEvictionRunsMillis(Long.valueOf(sourceMap.get("spring.redis.jedis.pool.timeBetweenEvictionRunsMillis").toString()));
config.setNumTestsPerEvictionRun((Integer)sourceMap.get("spring.redis.jedis.pool.timeBetweenEvictionRunsMillis"));
config.setMinEvictableIdleTimeMillis(Long.valueOf(sourceMap.get("spring.redis.jedis.pool.minEvictableIdleTimeMillis").toString()));
return config;
}
//
logger.error(" JedisPoolConfig ");
return new JedisPoolConfig();
}
/**
*
*/
@Bean
public PropertySource> readProperties(){
String yml = "application-" + active +".yml";
ClassPathResource resource = new ClassPathResource(yml);
PropertySourcesLoader loader = new PropertySourcesLoader();
PropertySource> load;
try {
load = (PropertySource>) loader.load(resource);
return load;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
JedisPoolをゲット
JedisPoolによって具体的な接続が得られ、これまで様々な操作が行われてきた.
@Component("RedisService")
public class RedisService {
/**
*
*/
@Autowired
private static JedisPool jedisPool;
/**
* JedisPool
*/
@Autowired
public void setJedisPool(JedisPool jedisPool) {
RedisService.jedisPool = jedisPool;
}
// ... redis
}
次の手順に従います.
実はそんなに考えていません.このredisServiceクラスにjedisPoolが必要である以上、@Bean方式でnewを出して、半日springbootを探して読みました.ymlファイルのツールクラス、springbootに付属のツールクラスがあることを発見しました
YamlPropertySourceLoader , , ,
PropertySourcesLoader , ,
その後springbootには独自のredis読み出し構成クラスがあり、RedisProperties