Java工具类之一DataSourse工具类(含有事务的工具类)

本文介绍了一个利用 C3P0 实现的含有事务处理功能的 DataSource 工具类,通过配置 c3p0-config.xml 文件来管理 MySQL 数据库连接。该工具类支持获取数据库连接、开启事务、提交并关闭连接以及回滚并关闭连接等功能。

这个工具类比较实用,用于读写MySQL数据库,获得连接的一个工具类,同样最好是有一个配置文件c3p0-config.xml,文件名是固定的,最好不要更改,这样更换地址等信息的时候,不用修改源码。这里需要五个工具包(只使用了当时的版本):

c3p0-0.9.1.2.jar      

commons-beanutils-1.8.3.jar

commons-dbutils-1.4.jar

commons-logging-1.1.1.jar

mysql-connector-java-5.1.39-bin.jar

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<default-config>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql:///day38</property>
		<property name="user">root</property>
		<property name="password">root</property>
	</default-config>
</c3p0-config>

含有事务的DataSourse工具类代码

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DataSourceUtils {
	private static DataSource ds=new ComboPooledDataSource();
	private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
	
	
	public static DataSource getDataSource(){
		return ds;
	}
	
	public static Connection getConnection() throws SQLException{
		Connection conn = tl.get();
		if(conn	== null){
			conn=ds.getConnection();
			
			tl.set(conn);
		}
		
		return conn;
	}
	
	public static void beginTransaction() throws SQLException{
		Connection conn = getConnection();
		
		conn.setAutoCommit(false);
	}
	
	public static void commitAndClose(){
		try {
			Connection conn = getConnection();
			
			if(conn != null){
				conn.commit();
			}
			
			closeConn(conn);
		} catch(Exception e){
			
		}
		
	}
	
	public static void rollbackAndClose(){
		try {
			Connection conn = getConnection();
			
			if(conn != null){
				conn.rollback();
			}
			
			closeConn(conn);
			
		} catch (SQLException e) {
			//
		}
	}
	private static void  closeConn(Connection conn){
		try {
			if(conn != null){
				conn.close();
			}
			tl.remove();
		} catch (Exception e) {
		}
		
		conn = null;
	}
}


F:\javaTools\jdk-1.8\bin\java.exe -javaagent:C:\Users\khy18\AppData\Local\JetBrains\IntelliJIdea2025.2\captureAgent\debugger-agent.jar=file:///C:/Users/khy18/AppData/Local/Temp/capture1822794222523235216.props -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:F:\javaTools\IntelliJ IDEA 2025.2\lib\idea_rt.jar=52118" -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -Ddebugger.agent.enable.coroutines=true -Dkotlinx.coroutines.debug.enable.flows.stack.trace=true -Dkotlinx.coroutines.debug.enable.mutable.state.flows.stack.trace=true -Dfile.encoding=UTF-8 -classpath "C:\Users\khy18\.m2\repository\org\junit\platform\junit-platform-launcher\1.8.2\junit-platform-launcher-1.8.2.jar;C:\Users\khy18\.m2\repository\org\junit\platform\junit-platform-engine\1.8.2\junit-platform-engine-1.8.2.jar;C:\Users\khy18\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\khy18\.m2\repository\org\junit\platform\junit-platform-commons\1.8.2\junit-platform-commons-1.8.2.jar;C:\Users\khy18\.m2\repository\org\apiguardian\apiguardian-api\1.1.2\apiguardian-api-1.1.2.jar;F:\javaTools\IntelliJ IDEA 2025.2\lib\idea_rt.jar;F:\javaTools\IntelliJ IDEA 2025.2\plugins\junit\lib\junit5-rt.jar;F:\javaTools\IntelliJ IDEA 2025.2\plugins\junit\lib\junit-rt.jar;F:\javaTools\jdk-1.8\jre\lib\charsets.jar;F:\javaTools\jdk-1.8\jre\lib\deploy.jar;F:\javaTools\jdk-1.8\jre\lib\ext\access-bridge-64.jar;F:\javaTools\jdk-1.8\jre\lib\ext\cldrdata.jar;F:\javaTools\jdk-1.8\jre\lib\ext\dnsns.jar;F:\javaTools\jdk-1.8\jre\lib\ext\jaccess.jar;F:\javaTools\jdk-1.8\jre\lib\ext\localedata.jar;F:\javaTools\jdk-1.8\jre\lib\ext\nashorn.jar;F:\javaTools\jdk-1.8\jre\lib\ext\sunec.jar;F:\javaTools\jdk-1.8\jre\lib\ext\sunjce_provider.jar;F:\javaTools\jdk-1.8\jre\lib\ext\sunmscapi.jar;F:\javaTools\jdk-1.8\jre\lib\ext\sunpkcs11.jar;F:\javaTools\jdk-1.8\jre\lib\ext\zipfs.jar;F:\javaTools\jdk-1.8\jre\lib\javaws.jar;F:\javaTools\jdk-1.8\jre\lib\jce.jar;F:\javaTools\jdk-1.8\jre\lib\jfr.jar;F:\javaTools\jdk-1.8\jre\lib\jsse.jar;F:\javaTools\jdk-1.8\jre\lib\management-agent.jar;F:\javaTools\jdk-1.8\jre\lib\plugin.jar;F:\javaTools\jdk-1.8\jre\lib\resources.jar;F:\javaTools\jdk-1.8\jre\lib\rt.jar;F:\javaCode\mybatis_plus_datasourse\target\test-classes;F:\javaCode\mybatis_plus_datasourse\target\classes;F:\javaTools\apache-maven\maven-repository\org\springframework\boot\spring-boot-starter\2.6.3\spring-boot-starter-2.6.3.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\boot\spring-boot\2.6.3\spring-boot-2.6.3.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\spring-context\5.3.15\spring-context-5.3.15.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\spring-beans\5.3.15\spring-beans-5.3.15.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\spring-expression\5.3.15\spring-expression-5.3.15.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\boot\spring-boot-autoconfigure\2.6.3\spring-boot-autoconfigure-2.6.3.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\boot\spring-boot-starter-logging\2.6.3\spring-boot-starter-logging-2.6.3.jar;F:\javaTools\apache-maven\maven-repository\ch\qos\logback\logback-classic\1.2.10\logback-classic-1.2.10.jar;F:\javaTools\apache-maven\maven-repository\ch\qos\logback\logback-core\1.2.10\logback-core-1.2.10.jar;F:\javaTools\apache-maven\maven-repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.1\log4j-to-slf4j-2.17.1.jar;F:\javaTools\apache-maven\maven-repository\org\apache\logging\log4j\log4j-api\2.17.1\log4j-api-2.17.1.jar;F:\javaTools\apache-maven\maven-repository\org\slf4j\jul-to-slf4j\1.7.33\jul-to-slf4j-1.7.33.jar;F:\javaTools\apache-maven\maven-repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\spring-core\5.3.15\spring-core-5.3.15.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\spring-jcl\5.3.15\spring-jcl-5.3.15.jar;F:\javaTools\apache-maven\maven-repository\org\yaml\snakeyaml\1.29\snakeyaml-1.29.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\boot\spring-boot-starter-test\2.6.3\spring-boot-starter-test-2.6.3.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\boot\spring-boot-test\2.6.3\spring-boot-test-2.6.3.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\boot\spring-boot-test-autoconfigure\2.6.3\spring-boot-test-autoconfigure-2.6.3.jar;F:\javaTools\apache-maven\maven-repository\com\jayway\jsonpath\json-path\2.6.0\json-path-2.6.0.jar;F:\javaTools\apache-maven\maven-repository\net\minidev\json-smart\2.4.7\json-smart-2.4.7.jar;F:\javaTools\apache-maven\maven-repository\net\minidev\accessors-smart\2.4.7\accessors-smart-2.4.7.jar;F:\javaTools\apache-maven\maven-repository\org\ow2\asm\asm\9.1\asm-9.1.jar;F:\javaTools\apache-maven\maven-repository\org\slf4j\slf4j-api\1.7.33\slf4j-api-1.7.33.jar;F:\javaTools\apache-maven\maven-repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.3\jakarta.xml.bind-api-2.3.3.jar;F:\javaTools\apache-maven\maven-repository\jakarta\activation\jakarta.activation-api\1.2.2\jakarta.activation-api-1.2.2.jar;F:\javaTools\apache-maven\maven-repository\org\assertj\assertj-core\3.21.0\assertj-core-3.21.0.jar;F:\javaTools\apache-maven\maven-repository\org\hamcrest\hamcrest\2.2\hamcrest-2.2.jar;F:\javaTools\apache-maven\maven-repository\org\junit\jupiter\junit-jupiter\5.8.2\junit-jupiter-5.8.2.jar;F:\javaTools\apache-maven\maven-repository\org\junit\jupiter\junit-jupiter-api\5.8.2\junit-jupiter-api-5.8.2.jar;F:\javaTools\apache-maven\maven-repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;F:\javaTools\apache-maven\maven-repository\org\junit\platform\junit-platform-commons\1.8.2\junit-platform-commons-1.8.2.jar;F:\javaTools\apache-maven\maven-repository\org\apiguardian\apiguardian-api\1.1.2\apiguardian-api-1.1.2.jar;F:\javaTools\apache-maven\maven-repository\org\junit\jupiter\junit-jupiter-params\5.8.2\junit-jupiter-params-5.8.2.jar;F:\javaTools\apache-maven\maven-repository\org\junit\jupiter\junit-jupiter-engine\5.8.2\junit-jupiter-engine-5.8.2.jar;F:\javaTools\apache-maven\maven-repository\org\junit\platform\junit-platform-engine\1.8.2\junit-platform-engine-1.8.2.jar;F:\javaTools\apache-maven\maven-repository\org\mockito\mockito-core\4.0.0\mockito-core-4.0.0.jar;F:\javaTools\apache-maven\maven-repository\net\bytebuddy\byte-buddy\1.11.22\byte-buddy-1.11.22.jar;F:\javaTools\apache-maven\maven-repository\net\bytebuddy\byte-buddy-agent\1.11.22\byte-buddy-agent-1.11.22.jar;F:\javaTools\apache-maven\maven-repository\org\objenesis\objenesis\3.2\objenesis-3.2.jar;F:\javaTools\apache-maven\maven-repository\org\mockito\mockito-junit-jupiter\4.0.0\mockito-junit-jupiter-4.0.0.jar;F:\javaTools\apache-maven\maven-repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;F:\javaTools\apache-maven\maven-repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\spring-test\5.3.15\spring-test-5.3.15.jar;F:\javaTools\apache-maven\maven-repository\org\xmlunit\xmlunit-core\2.8.4\xmlunit-core-2.8.4.jar;F:\javaTools\apache-maven\maven-repository\com\baomidou\mybatis-plus-boot-starter\3.5.1\mybatis-plus-boot-starter-3.5.1.jar;F:\javaTools\apache-maven\maven-repository\com\baomidou\mybatis-plus\3.5.1\mybatis-plus-3.5.1.jar;F:\javaTools\apache-maven\maven-repository\com\baomidou\mybatis-plus-extension\3.5.1\mybatis-plus-extension-3.5.1.jar;F:\javaTools\apache-maven\maven-repository\com\baomidou\mybatis-plus-core\3.5.1\mybatis-plus-core-3.5.1.jar;F:\javaTools\apache-maven\maven-repository\com\baomidou\mybatis-plus-annotation\3.5.1\mybatis-plus-annotation-3.5.1.jar;F:\javaTools\apache-maven\maven-repository\com\github\jsqlparser\jsqlparser\4.3\jsqlparser-4.3.jar;F:\javaTools\apache-maven\maven-repository\org\mybatis\mybatis\3.5.9\mybatis-3.5.9.jar;F:\javaTools\apache-maven\maven-repository\org\mybatis\mybatis-spring\2.0.6\mybatis-spring-2.0.6.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\boot\spring-boot-starter-jdbc\2.6.3\spring-boot-starter-jdbc-2.6.3.jar;F:\javaTools\apache-maven\maven-repository\com\zaxxer\HikariCP\4.0.3\HikariCP-4.0.3.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\spring-jdbc\5.3.15\spring-jdbc-5.3.15.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\spring-tx\5.3.15\spring-tx-5.3.15.jar;F:\javaTools\apache-maven\maven-repository\com\baomidou\dynamic-datasource-spring-boot-starter\3.5.0\dynamic-datasource-spring-boot-starter-3.5.0.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\boot\spring-boot-starter-aop\2.6.3\spring-boot-starter-aop-2.6.3.jar;F:\javaTools\apache-maven\maven-repository\org\springframework\spring-aop\5.3.15\spring-aop-5.3.15.jar;F:\javaTools\apache-maven\maven-repository\org\aspectj\aspectjweaver\1.9.7\aspectjweaver-1.9.7.jar;F:\javaTools\apache-maven\maven-repository\org\projectlombok\lombok\1.18.22\lombok-1.18.22.jar;F:\javaTools\apache-maven\maven-repository\mysql\mysql-connector-java\8.0.28\mysql-connector-java-8.0.28.jar;F:\javaTools\apache-maven\maven-repository\com\baomidou\mybatis-plus-generator\3.5.1\mybatis-plus-generator-3.5.1.jar;F:\javaTools\apache-maven\maven-repository\org\freemarker\freemarker\2.3.31\freemarker-2.3.31.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 com.it.k.TestDatasourceApplicationTests,contextLoads java.lang.NullPointerException at com.it.k.TestDatasourceApplicationTests.contextLoads(TestDatasourceApplicationTests.java:20) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725) at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.util.ArrayList.forEach(ArrayList.java:1259) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.util.ArrayList.forEach(ArrayList.java:1259) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:66) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:231) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) Process finished with exit code -1
最新发布
09-05
`java.lang.NullPointerException` 通常是在代码中尝试对 `null` 对象进行操作时抛出的异常。要解决 `TestDatasourceApplicationTests` 类的 `contextLoads` 方法中出现的该异常,可从以下几个方面排查: ### 检查依赖注入 在 Spring Boot 项目中,若使用了依赖注入,要确保注入的对象已正确初始化。例如: ```java import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest public class TestDatasourceApplicationTests { @Autowired private SomeService someService; // 假设注入了一个服务 @Test public void contextLoads() { // 如果 someService 为 null,调用其方法会抛出 NPE someService.doSomething(); } } ``` 确保 `SomeService` 类被 Spring 容器管理,并且在 `@Configuration` 类中正确配置,或者使用了 `@Service` 注解。 ### 检查对象初始化 若在方法中手动创建对象,要确保对象已正确初始化。示例如下: ```java @Test public void contextLoads() { SomeObject someObject = null; // 以下代码会抛出 NPE someObject.doSomething(); // 正确的做法是初始化对象 someObject = new SomeObject(); someObject.doSomething(); } ``` ### 检查方法返回值 当调用方法并使用其返回值时,要确保该方法不会返回 `null`。如果可能返回 `null`,可以进行 `null` 检查: ```java @Test public void contextLoads() { SomeObject someObject = getSomeObject(); if (someObject != null) { someObject.doSomething(); } } private SomeObject getSomeObject() { // 模拟可能返回 null 的情况 return null; } ``` ### 检查配置文件 确保配置文件中的配置项正确,没有遗漏或错误的配置。例如,数据库连接配置、服务地址配置等。 ### 查看日志 查看项目的日志文件,日志中可能包含更详细的错误信息,帮助定位 `null` 对象的来源。 ### 调试代码 在 `TestDatasourceApplicationTests.java` 的第 20 行设置断点,使用调试工具逐步执行代码,查看变量的值,确定哪个对象为 `null`。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值