下面是关于SpringBoot环境中Druid数据源使用及特点的详细攻略。
1. 什么是Druid
Druid是阿里巴巴开源的数据连接池。相比于传统的连接池,Druid具有更好的扩展性和稳定性。同时,它还提供了多种功能强大的监控和统计特性,如监控SQL执行情况、打印SQL慢日志等。
2. 如何在SpringBoot中使用Druid数据源
2.1 引入依赖
首先,在项目的pom.xml文件中添加Druid的依赖:
<!--Druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
2.2 配置数据源
接下来,需要在配置文件中配置Druid的数据源。在application.yml或者application.properties文件中添加以下配置项:
spring:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
username: root
password: root
# 配置Druid数据源
type: com.alibaba.druid.pool.DruidDataSource
filters: stat,wall,log4j # 配置Druid监控及防火墙功能
maxActive: 20 #最大连接池数量
initialSize: 1 #初始化连接池数量
maxWait: 60000 #获取连接的最大等待时间
minIdle: 1 #最小连接池数量
timeBetweenEvictionRunsMillis: 60000 #检测空闲连接的间隔时间
minEvictableIdleTimeMillis: 300000 #连接最小空闲时间, 超出时间会被关闭
validationQuery: SELECT "x" FROM DUAL #验证连接是否有效的SQL语句
testWhileIdle: true #在归还连接到连接池时是否验证连接是否有效
2.3 代码中使用Druid数据源
在SpringBoot启动类中添加@EnableTransactionManagement注解启用Druid的事务支持:
@EnableTransactionManagement
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
在DAO层的代码中,通过@Autowired注解注入DataSource对象,直接使用即可,如下所示:
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private DataSource dataSource;
// ...
}
3. Druid数据源的特点
除了连接池的基本功能,Druid还提供了以下特点:
- 监控SQL执行情况:Druid内置提供了强大的监控功能,可以监控应用中数据库连接池和SQL的情况,包括可疑的SQL、慢SQL、并发数量等。在应用运行时,可以通过访问http://localhost:8080/druid/index.html 查看监控数据和统计分析。
- 防止SQL注入攻击:Druid提供了防火墙功能,可以防止SQL注入攻击。
- 壮大运维能力:Druid提供了强大的统计和日志查看功能,可以用于监控应用、定制运维消息,同时支持通过JMX实现监控数据的远程管理等。
4. 提示:Druid数据源的使用示例
下面给出两条Druid数据源使用的代码示例,供参考:
示例1:查询表中的某些数据
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private DataSource dataSource;
@Override
public List<User> getUserList() {
try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement("SELECT * FROM user")) {
ResultSet resultSet = statement.executeQuery();
List<User> userList = new ArrayList<>();
while (resultSet.next()) {
User user = new User();
user.setId(resultSet.getLong("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
userList.add(user);
}
return userList;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
示例2:使用注解@Transactional控制事务
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
@Transactional
public void addUser(User user) {
userDao.addUser(user);
throw new RuntimeException("something wrong");
}
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot环境Druid数据源使用及特点 - Python技术站