Java JDBCTemplate为空
我正在尝试使用JDBC模板连接到数据库,并且有一个包含以下内容的application.config文件:Java JDBCTemplate为空,java,spring,jdbc,jdbctemplate,Java,Spring,Jdbc,Jdbctemplate,我正在尝试使用JDBC模板连接到数据库,并且有一个包含以下内容的application.config文件: spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/herosighting<br> spring.datasource.username=root<br> spring.datasource.pa
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/herosighting<br>
spring.datasource.username=root<br>
spring.datasource.password=<br>
最后一个方法中的返回值为null,因为JDBCTemplate为null 我调用了main中的方法来测试它,如下所示:
@Repository
public class Test {
@Autowired
static LocationDao dao;
public static void main(String[] args)
{
Location l = dao.getLocationById(1);
}
}
有趣的是,据我所知,我在另一个文件中使用完全相同的pom.xml进行了完全相同的配置,而这个项目是jdbc工作的
My pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.sg</groupId>
<artifactId>SuperheroSightings</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>SuperheroSightings</name>
<description>Full stack Spring application for Superhero Sightings</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我不想运行单元测试或任何东西。我所要做的就是从我的DAO运行一个方法,看看与数据库的连接是否正常。问题是JDBCTemplate是空的,我不知道为什么
下面是确切的错误:
线程“main”java.lang.NullPointerException中的异常:无法调用“com.sg.superherosights.Dao.LocationDao.getLocationById(int)”,因为“com.sg.superherosights.Test.Dao”为空
在com.sg.SuperheroSightings.Test.main(Test.java:18)上,这不是Spring引导应用程序的main方法应该是什么样子。 要正确启动,应该是这样的:
public static void main(String[] args)
{
SpringApplication.run(Test.class, args);
}
只是为了补充安德烈亚斯·拉杜尔的答案。您必须在该主方法上启动spring引导应用程序,如下所述 如果您还想在主方法中使用一些Springbean,那么您必须自己从应用程序上下文中检索它。该静态主方法上的自动连线将不可用,因为该方法用于调用应用程序上下文的加载
public static void main(String[] args) {
ConfigurableApplicationContext appContext = SpringApplication.run(Test.class, args);
LocationDao dao = appContext.getBean(LocationDao.class);
Locationl = dao.getLocationById(1);
}
他正在尝试测试他的存储库,它并不是一个弹簧靴application@Stultuske没有迹象表明他试图测试。对我来说,他只是想玩弄spring上下文,看看是否可以连接到database@BougOP在问题中说:“测试它”。@Andreas Radauer我已经更新了我的问题。我觉得有点混乱,因为我的项目中确实有这些代码,而且运行良好,这是一个单独的文件。您应该研究如何创建适当的测试。没有理由将测试标记为存储库,也没有理由在其中包含main方法。1。您不能插入到
静态
字段中。2.您在运行main时没有使用spring,因此不会发生注入。如果您想测试您的应用程序,您应该查看@SpringBootTest注释“上一个方法中的返回为null,因为JDBCTemplate为null”:不可能。它会抛出一个NullPointerException
。我已经更新了我的问题,因为我觉得有点混乱。我确实在另一个文件中初始化了appContext。同样,当我将上面的代码放在我的SpringApplication.run文件中时,它也可以工作。但是,我不必在另一个项目中这样做,在那里我采用了相同的方法,除了在Spring MVC控制器中有@Autowired Dao之外
public static void main(String[] args)
{
SpringApplication.run(Test.class, args);
}
public static void main(String[] args) {
ConfigurableApplicationContext appContext = SpringApplication.run(Test.class, args);
LocationDao dao = appContext.getBean(LocationDao.class);
Locationl = dao.getLocationById(1);
}