Java JDBCTemplate为空

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

我正在尝试使用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.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);     
        }