当前位置: 首页 > 知识库问答 >
问题:

为什么我的@Autowired DataSource和JdbcTemplate会变为null?[重复]

令狐嘉运
2023-03-14

我试图在配置类中定义datasource和jdbctemplate bean。然而,每当我将它们自动连接到Restcontroller类时,它们都会为null。为什么?

在我的配置类中

@Configuration
@ComponentScan({ "org.airi.airibot.controllers", "org.airi.airibot.configs" })
public class DatabaseConfig {
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("org.postgresql.Driver");
        dataSource.setUrl("jdbc:postgres://localhost:5432/testdb");
        dataSource.setUsername("testuser");
        dataSource.setPassword("testpassword");
        return dataSource;
    }

    @Bean
    public SimpleJdbcCall spCall() {
        SimpleJdbcCall sp_call = new SimpleJdbcCall(dataSource());
        return sp_call;
    }


    @Bean public JdbcTemplate jdbcTemplate() { 
        JdbcTemplate jdbc_template = new JdbcTemplate(dataSource()); 
        return jdbc_template; 
    }

}

restcontroller类内部

@CrossOrigin(origins = "http://localhost:4200")
@RestController
public class TestController {

    @Autowired
    public DataSource dataSource;

    @Autowired
    public JdbcTemplate jdbcTemplate;

    private List<DiscordServer> servers = createList();

    @RequestMapping(value = "/server-emotes", method = RequestMethod.GET, produces = "application/json")
    public List<DiscordServer> getServers() {
        return servers;
    }

    private List<DiscordServer> createList() {
        List<DiscordServer> temp_servers = new ArrayList<>();

        //TODO: logic to add servers

        System.out.println(dataSource);
        return temp_servers;
    }


      public int getCountOfServers() { 
          int server_count = jdbcTemplate.queryForObject( "SELECT COUNT(*) FROM DISCORD_SERVER",Integer.class); 
          return server_count; 
      }


}

每次尝试编译时,我都会收到来自autowired字段的空指针异常,即使我没有手动实例化任何内容,只是让spring通过自动连线来管理所有实例。

共有1个答案

景书
2023-03-14

你有没有试着把它交给构造器。把它们保密。像那样


private DataSource dataSource;
private JdbcTemplate jdbcTemplate;

@Autowired
TestController (DataSource dataSource, JdbcTemplate jdbcTemplate){
    this.dataSource = dataSource;
    this.jdbcTemplate = jdbcTemplate;
}
 类似资料:
  • 问题内容: 我正在尝试使我的元素保持原状(过渡之后)。现在,翻译后的位置是我想要的位置,但随后我的名字又回到了报价单上。我是否缺少一段代码,或者是否有一段代码使这种回弹发生? 问题答案: 原因和解决方法: CSS转换通常不能应用于具有设置的元素。虽然奇怪的是,这种情况似乎最初发生在回弹之前,但解决方案是将设置更改为下面的代码段所示。 如果元素不可变形,为什么最初会对其进行翻译? 浏览器(至少是Ch

  • 问题内容: 我有一个类Hra1,它定义了游戏规则(game = hra)。问题是,尽管在构造函数中创建了poleMinci数组,但我得到的是空值,例如poleMinci == null。换句话说,玩家的move方法始终返回false。 构造函数: 球员的移动方法: 问题答案: 您正在阴影变量: 在该构造函数中,由于poleMinci是在构造函数内部声明的,因此仅在构造函数内部可见。如果您在类中具有

  • 问题内容: 在我的Web应用程序中,我在Apache Tomcat(TomEE)/7.0.37服务器上使用OpenJPA。我使用Netbeans自动生成类(“来自数据库的实体类…”和“来自实体类的会话Bean …”)。在SessionBean(例如UserFacade)上,我想获取EntityManager: 但是当我通过上述方式得到它时,我得到的是空值。当我通过: ecm不为空,还可以 我的pe

  • 本文向大家介绍null == undefined为什么?相关面试题,主要包含被问及null == undefined为什么?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 要比较相等性之前,不能将null 和 undefined 转换成其他任何值,但 null == undefined 会返回 true 。ECMAScript规范中是这样定义的。

  • 问题内容: 我有一些调用的代码。 不过,这将返回null。 当我从命令行而不是从Eclipse启动相同的代码时,它将返回一个类加载器。 我可以破解代码来做到这一点… 两者都被编译并使用相同的JVM运行。(我确定99.99%)。 任何人都知道为什么第一个会为类加载器返回null? 编辑: 我的问题是:“没有人知道为什么同一类通过Eclipse启动时会返回null,而从命令行加载时会返回类加载器。”

  • 我正试图找到更快的批量插入方法。 我试图用jdbcTemplate.update(String sql)插入几个批次,其中sql是由StringBuilder构建的,看起来像: 批量大小正好是1000。我插入了将近100批。我用秒表查看了时间,发现了插入时间: 我很高兴,但我想让我的代码更好。 之后,我尝试使用jdbcTemplate.batch更新的方式如下: sql是什么样子的 我很失望!jd