Spring 解决线程中无法获得数据库连接

吴宗坡 博客 Spring解决线程中无法获得数据库连接

项目使用Hibernate,Hibernate交给了Spring管理。

Class:CgzServiceImpl

@Component("cgzService")
public class CgzServiceImpl implements CgzService {

    @Resource
    private StatsCommonService statServ;
    @Resource
    private CommonService updateServ;
    
    @Override

    public void updateBaseDate(String time) {

    ...

   }

}

需要:需要创建一个线程,隔一段时间执行一次UpdateBaseDate(String time)方法。 由于在线程中无法通过注解得到CgzServiceImpl对象,也不能通过new的方式创建CgzServiceImpl对象,否则对象为空。这是为什么哪?

因为:这个类CgzServiceImpl通过@Component("cgzService")交给spring容器管理了,那么上面的两种方式都无法从spring容器中获得数据库连接。为什么无法获得连接,因为线程类没有交给spring管理,同new一个CgzServiceImpl对象,也无法从spring容器中获得数据库连接。

所以当你使用CgzService cgz=new CgzServiceImpl(); 时或者

CgzServiceImpls cgz;时

cgz.updateBaseDate("2012-01-01"); 会报空指针异常。


解决方法:

创建一个Spring容器 ApplicationContext  ctx= new ClassPathXmlApplicationContext("beans.xml"); //整个项目只创建一个就可以,多了容易内存溢出!!!

CgzService cgzS=(CgzService )ctx.getBean("cgzService");

cgzS.updateBaseDate("2012-01-01"); 就不回报空异常的错误了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要查看 Spring Boot 项目数据库连接池的信息,可以通过以下几种方式之一来实现: 1. 在控制台输出连接池信息: 可以通过在应用程序的配置文件添加 `logging.level.org.apache.tomcat.jdbc.pool.ConnectionPool=DEBUG` 来启用连接池日志记录。这样,每次获取或释放连接时都会在控制台输出相关信息。 2. 使用 JMX 监控: 可以在应用程序的配置文件添加 `spring.datasource.jmx-enabled=true` 来启用 JMX 监控。然后,可以使用 JMX 客户端 (如 jconsole) 来查看连接池的信息。 3. 使用连接池提供的 API: 可以使用连接池提供的 API 来查看连接池的信息。例如,可以使用 `DataSource.getNumIdle()` 方法来查看当前空闲连接的数量,使用 `DataSource.getNumActive()` 方法来查看当前活动连接的数量等。 4. 使用第三方工具: 还可以使用一些第三方工具来查看连接池的信息,例如 P6Spy、JDBC Spy 等。这些工具可以在不修改应用程序代码的情况下,通过代理连接池来记录连接的使用情况。 ### 回答2: 在Spring Boot项目,可以通过配置文件和Spring Boot Actuator来查看数据库连接池的信息。 1. 配置文件:在Spring Boot的配置文件(如application.properties或application.yml),可以设置数据库连接池相关的属性。例如,可以配置连接池的最大连接数、最小连接数、等待队列长度等。连接池的配置属性通常以"spring.datasource"开头,具体属性可以查阅相关文档。 2. Spring Boot Actuator:Spring Boot Actuator是Spring Boot提供的用于监控和管理应用程序的模块。默认情况下,Spring Boot Actuator提供了多个端点(Endpoints),可以通过访问这些端点来获取应用程序的各种信息。其,与数据库连接池相关的信息可以通过"/actuator/datasource"端点获取。 在使用Spring Boot Actuator的情况下,需要在配置文件添加如下配置: management.endpoint.datasource.enabled=true 然后,可以通过访问"http://localhost:8080/actuator/datasource"来获取数据库连接池的信息,包括当前活跃连接数、空闲连接数、最大连接数等。 另外,如果项目使用的是常见的数据库连接池库,如HikariCP,可以通过相关的监控和管理工具(如HikariCP的Web界面或JMX)来查看更详细的连接池信息和统计数据。 总之,通过配置文件和Spring Boot Actuator,可以方便地查看和管理Spring Boot项目数据库连接池信息。 ### 回答3: 要查看Spring Boot项目数据库连接池的信息,可以按照以下步骤操作: 1. 打开Spring Boot项目的配置文件application.properties(或application.yml),查找数据库连接池的相关配置项。 2. 在配置文件,通常会有以下几个关键的配置项: - spring.datasource.url:数据库连接的URL地址。 - spring.datasource.username:数据库用户名。 - spring.datasource.password:数据库密码。 - spring.datasource.driver-class-name:数据库驱动类名。 - spring.datasource.hikari.*:如果使用HikariCP连接池,还会有一些额外的配置项,如最大连接数、最小空闲连接数等。 3. 根据配置项的值,可以得到数据库连接的详细信息,如连接的URL地址、用户名、密码等。 4. 如果项目使用的是HikariCP连接池,还可以通过以下方式获取更详细的连接池信息: - 在Spring Boot应用运行过程,打开浏览器访问/actuator/hikaricp路径(如http://localhost:8080/actuator/hikaricp),可以查看当前连接池的状态信息,包括连接数、空闲连接数、最大连接数、等待连接线程数等。 - 在应用的日志文件查找包含"HikariPool"关键字的日志,其会输出连接池的详细信息,如创建连接、回收连接、连接超时等。 - 如果项目引入了HikariCP的管理器如HikariDataSource、HikariPool,可以通过调用其相关方法来获取连接池的信息,如获取当前连接数、空闲连接数等。 综上所述,通过查看配置文件和采用特定的方法,可以获取Spring Boot项目数据库连接池的相关信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值