是否能用单例建立一个数据库连接
将数据库连接用一个bean实现,不是每次都new一个,但是这样的话项目启动后默认单例的,那么所有数据库请求都会用这个连接,这会有问题么,特别再请求量很大时
相关代码
// 注册一个bean
@Bean
public InfluxDbTemplate influxDbTemplate() {
return new InfluxDbTemplate(
iotInfluxDbProperties.getUsername(),
iotInfluxDbProperties.getPassword(),
iotInfluxDbProperties.getOpenUrl(),
iotInfluxDbProperties.getDatabase(),
iotInfluxDbProperties.getRetentionPolicy());
}
这个对象:
public class InfluxDbTemplate {
private String username;
private String password;
private String openUrl;
private InfluxDB influxDB;
public InfluxDbTemplate(String username, String password, String openUrl) {
this.username = username;
this.password = password;
this.openUrl = openUrl;
influxDbBuild();
}
// 建立数据库连接
public InfluxDB influxDbBuild() {
if (influxDB == null) {
influxDB = InfluxDBFactory.connect(openUrl, username, password);
}
return influxDB;
}
}
以上这种方式,哪里用到操作数据库就 @Autowired进来,虽然用起来很方便,但是不知道有什么问题,还有操作数据库后要不要调用close方法下
有没有大侠可以解答下,给点建议
所有网络资源的连接,如果使用在多线程环境,我没见过把连接作为单例的,都是连接池作为单例,连接是按需生成的。
原因在于,多线程环境下,如果不对这个单例做访问控制,后果很严重。线程1刚发送完请求,线程2拿到这个响应会出现什么问题?或者说两个线程同时往1个TCP连接发数据会有什么问题?