如何配置单数据源
CommandLineRunner : 在Spring项目启动后,执行它的实现run()方法。
在使用actuator时,可以调用 http://localhost:8080/actuator/beans 查看当前的bean
若访问 http://localhost:8080/actuator/health 为up,但是访问 http://localhost:8080/actuator/beans 404。则需要在配置文件中增加以下配置:
management.endpoints.web.exposure.include=*
启动类:
@Configuration
public class DataSourceDemo {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext*.xml");
showBeans(applicationContext);
showDataSource(applicationContext);
}
@Bean(destroyMethod = "close")
public DataSource dataSource() throws Exception {
Properties properties = new Properties();
properties.setProperty("driverClassName", "org.h2.Driver");
properties.setProperty("url", "jdbc:h2:mem:testdb");
properties.setProperty("username", "sa");
return BasicDataSourceFactory.createDataSource(properties);
}
public static void showBeans(ApplicationContext applicationContext) {
System.out.println(Arrays.toString(applicationContext.getBeanDefinitionNames()));
}
public static void showDataSource(ApplicationContext applicationContext) {
System.out.println(applicationContext.getBean("dataSource").toString());
}
}
spring 配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="study.spring" />
<!-- <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"-->
<!-- destroy-method="close">-->
<!-- <property name="driverClassName" value="org.h2.Driver" />-->
<!-- <property name="url" value="jdbc:h2:mem:testdb" />-->
<!-- <property name="username" value="SA" />-->
<!-- <property name="password" value="" />-->
<!-- </bean>-->
</beans>
配置初始化sql:
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.hikari.jdbc-url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.schema=classpath:test-schema.sql
spring.datasource.data=classpath:test-data.sql
如何配置多数据源
@Autowired 与@Resource的区别
- @Autowired默认按类型装配(这个注解是属于spring的)
- @Resource(这个注解属于J2EE的),默认按照名称进行装配
参考: https://blog.csdn.net/weixin_40423597/article/details/80643990
配置多数据源:
@Bean
@ConfigurationProperties("foo.datasource")
public DataSourceProperties fooDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
public DataSource fooDataSource() {
DataSourceProperties dataSourceProperties = fooDataSourceProperties();
log.info("foo datasource: {}", dataSourceProperties.getUrl());
return dataSourceProperties.initializeDataSourceBuilder().build();
}
@Bean
@Resource
public PlatformTransactionManager fooTxManager(DataSource fooDataSource) {
return new DataSourceTransactionManager(fooDataSource);
}
foo.datasource.url=jdbc:h2:mem:foo
foo.datasource.username=sa
foo.datasource.password=
那些好用的连接池们:HikariCP
https://github.com/brettwooldridge/HikariCP
那些好用的连接池们:Alibaba Druid
https://github.com/alibaba/druid
@Slf4j
public class ConnectionLogFilter extends FilterEventAdapter {
@Override
public void connection_connectBefore(FilterChain chain, Properties info) {
log.info("BEFORE CONNECTION!");
}
@Override
public void connection_connectAfter(ConnectionProxy connection) {
log.info("AFTER CONNECTION!");
}
}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
<exclusions>
<exclusion>
<artifactId>HikariCP</artifactId>
<groupId>com.zaxxer</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.22</version>
</dependency>