环境:
1、springboot2 jpa tomcat8
2、启动方式:tomcat8启动
3、没有xml文件和其他配置文件,全部要集成到yml文件中
我需要详细的代码,包括config文件中引入的包。
数据源的相关配置全部要放到tomcat的context.xml中。
如果可以,最好使用JNDI
愿意有偿酬谢,我QQ529629886
已经测试验证,两步即可:
1、yml配置如下
jndi-datasource: #jndi数据源的配置
open: true #是否开启jndi配置
jndiNameList: #开启jndi配置时,配置如下信息,spring.datasource不在生效
- dataSourceName: dataSource
dialect: oracle
jndiName: java:comp/env/jdbc/ccense
- dataSourceName: dataSource2
dialect: oracle
jndiName: java:comp/env/jdbc/face
2、创建JndiDataSourceConfig.java
@ConditionalOnProperty(prefix = "jndi-datasource", name = "open", havingValue = "true")
@Configuration
@EnableTransactionManagement(order = 2)
@Slf4j
public class JndiDataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "newcap.jndi-datasource")
public JNDIProperties jndiProperties() {
JNDIProperties jndiProperties = new JNDIProperties();
return jndiProperties;
}
@Bean(name = "dataSource")
public DynamicDataSource dataSource() {
HashMap<Object, Object> hashMap = new HashMap<>();
JNDIProperties jndiProperties = jndiProperties();
for (JndiProperties properties : jndiProperties.getJndiNameList()){
DataSourceDialect.dataSourceNameDialect.put(properties.getDataSourceName(), properties.getDataSourceName());
JndiDataSourceLookup lookup = new JndiDataSourceLookup();
lookup.setResourceRef(true);
DataSource dataSource = lookup.getDataSource(properties.getJndiName());
hashMap.put(properties.getDataSourceName(), dataSource);
}
DynamicDataSource dynamicDataSource = new DynamicDataSource();
dynamicDataSource.setTargetDataSources(hashMap);
//设置主数据源
dynamicDataSource.setDefaultTargetDataSource(hashMap.get(DatasourceEnum.DATA_SOURCE));
return dynamicDataSource;
}
}
(1)配置tomcat的context.xml文件中,增加如下配置
<Resource name="jdbc/mbr"
factory="com.alibaba.druid.pool.DruidDataSourceFactory"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@//192.168.1.5:1901/testdb"
username="root"
password="root"
maxActive="50"
maxWait="10000"
removeabandoned="true"
removeabandonedtimeout="60"
logabandoned="false"
filters="stat" />
(2)yml配置文件中引用
spring:
datasource:
jndiName:
masterDB: java:comp/env/jdbc/master
clusterDB: java:comp/env/jdbc/mbr
type: org.springframework.jndi.JndiObjectFactoryBean
druid:
# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
max-active: 20
# 配置获取连接等待超时的时间
max-wait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
max-pool-prepared-statement-per-connection-size: 20
filters: stat,wall
use-global-data-source-stat: true
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 配置监控服务器
stat-view-servlet:
login-username: admin
login-password: 123456
reset-enable: false
url-pattern: /druid/*
# 添加IP白名单
#allow:
# 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
#deny:
web-stat-filter:
# 添加过滤规则
url-pattern: /*
# 忽略过滤格式
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"