1. yaml配置
spring:
datasource:
dynamic:
primary: postgresql #设置默认的数据源或者数据源组,默认值即为pg
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
datasource:
postgresql:
url: jdbc:postgresql://ip:5432/db_1?currentSchema=public
username: username1
password: password1
pss:
url: jdbc:postgresql://ip:5432/db_2?currentSchema=public
username: username2
password: password2
2. 判断数据源
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.EnvironmentAware;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
@Component
public class DynamicDataSourceRegister implements EnvironmentAware {
private static final Logger logger = LoggerFactory.getLogger(DynamicDataSourceRegister.class);
public static boolean hasPss = false;
@Override
public void setEnvironment(Environment environment) {
String myProperty = environment.getProperty("spring.datasource.custom.portal-datasource");
hasPss = StringUtils.isNotEmpty(myProperty) && "pss".equals(myProperty);
System.out.println(myProperty);
}
}
3. 判断使用
这部分代码也是另一个服务的公共代码,另一个服务没有 pss 数据库,所以这里需要判断了,才能使用pss 库。
@Override
public void save(SysLog log) {
if(DynamicDataSourceRegister.hasPss){
DynamicDataSourceContextHolder.push("pss");
try {
logMapper.insert(log);
} finally {
DynamicDataSourceContextHolder.clear();
}
}else{
logMapper.insert(log);
}
}