那么关于Spring Boot自定义数据源DruidDataSource的完整攻略,主要分为以下几个步骤:
- 导入相关依赖
首先,在Spring Boot项目中,需要导入Druid和JDBC相关的依赖。可以在pom.xml文件中加入如下代码:
<!-- 导入Druid数据源依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
<!-- 导入JDBC依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.4.3</version>
</dependency>
- 配置Druid数据源
其次,我们需要在application.properties或application.yml文件中配置Druid数据源。可配置的项如下:
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
#Druid参数配置
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=60000
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
spring.datasource.druid.log-slow-sql=true
spring.datasource.druid.allow=true
spring.datasource.druid.remove-abandoned=true
spring.datasource.druid.remove-abandoned-timeout=1800
- 提供自定义Druid数据源
接着,我们需要定义一个类,该类继承AbstractRoutingDataSource抽象类,用于切换不同的数据源。示例代码如下:
public class DynamicDataSource extends AbstractRoutingDataSource {
public static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
@Override
protected Object determineCurrentLookupKey() {
return getDataSource();
}
public static void setDataSource(String dataSource) {
contextHolder.set(dataSource);
}
public static String getDataSource() {
return contextHolder.get();
}
public static void clearDataSource() {
contextHolder.remove();
}
}
- 配置自定义的数据源
最后,我们需要在Spring Boot的配置文件中设置我们刚才定义的数据源:
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.druid")
public DruidDataSource dataSource() {
return new DruidDataSource();
}
@Bean(name = "dataSourceProxy")
public DataSource dataSourceProxy() {
Map<Object, Object> targetDataSources = new HashMap<>();
DruidDataSource dataSource = dataSource();
targetDataSources.put("dataSource", dataSource);
DynamicDataSource dataSourceProxy = new DynamicDataSource();
dataSourceProxy.setTargetDataSources(targetDataSources);
dataSourceProxy.setDefaultTargetDataSource(dataSource);
return dataSourceProxy;
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSourceProxy) {
return new JdbcTemplate(dataSourceProxy);
}
}
至此,我们结束了整个自定义数据源DruidDataSource的配置过程。
下面是两个示例:
- 示例一:切换数据源
@Service
public class UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
public void addUser(User user) {
String sql = "insert into user(id, name, age) values(?, ?, ?)";
Object[] params = new Object[] {user.getId(), user.getName(), user.getAge()};
int count = jdbcTemplate.update(sql, params);
System.out.println("新增用户数:" + count);
}
public void findAll() {
DynamicDataSource.setDataSource("dataSource2");
String sql = "select * from user";
List<User> userList = jdbcTemplate.query(sql, new BeanPropertyRowMapper(User.class));
System.out.println("查询结果:" + userList);
DynamicDataSource.clearDataSource();
}
}
- 示例二:手动配置数据源
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai");
dataSource.setUsername("root");
dataSource.setPassword("root");
dataSource.setInitialSize(5);
dataSource.setMinIdle(5);
dataSource.setMaxActive(20);
dataSource.setMaxWait(60000);
dataSource.setTestWhileIdle(true);
dataSource.setTestOnBorrow(false);
dataSource.setTestOnReturn(false);
dataSource.setPoolPreparedStatements(true);
dataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
dataSource.setLogSlowSql(true);
return dataSource;
}
@Bean(name = "dataSourceProxy")
public DataSource dataSourceProxy() {
Map<Object, Object> targetDataSources = new HashMap<>();
DruidDataSource dataSource = (DruidDataSource) dataSource();
targetDataSources.put("dataSource", dataSource);
DynamicDataSource dataSourceProxy = new DynamicDataSource();
dataSourceProxy.setTargetDataSources(targetDataSources);
dataSourceProxy.setDefaultTargetDataSource(dataSource);
return dataSourceProxy;
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSourceProxy) {
return new JdbcTemplate(dataSourceProxy);
}
}
以上就是对Spring Boot自定义数据源DruidDataSource的完整攻略和示例讲解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot 自定义数据源DruidDataSource代码 - Python技术站