我正在做一个Spring Boot 2.1.6项目。
当我有一个自动连接的对象ScheduledTasks
时,我有了一个类db
,该对象使我可以访问jdbcTemplate
以便执行查询。当我从另一个文件main调用start
时,db
对象为null。如果我将start
方法直接放在主类db
中,则该方法不是null。
我不确定是什么问题。我在@Component
中放置了ScheduledTasks
注释,以便Spring知道我的自动装配对象。我想念什么?
这是我的ScheduledTasks
:
@Component
public class ScheduledTasks {
private Logger log = VastLogger.getLogger(TrackingEventController.class);
@Autowired
private DBHandler db;
public void start() {
if (db == null) {
log.info("db is null from parent");
}
}
}
这是我的主要课程:
@SpringBootApplication
@EnableJms
public class ServerMain implements CommandLineRunner {
private static final Logger log = LogManager.getLogger(ServerMain.class);
@Autowired
private DBHandler db;
public static void main(String[] args) {
log.warn("from main");
ConfigurableApplicationContext context = SpringApplication.run(ServerMain.class, args);
}
@Override
public void run(String... strings) throws Exception {
log.info("starting run");
db.initDBTables();
ScheduledTasks tasks = new ScheduledTasks();
tasks.start();
}
答案 0 :(得分:4)
您正在使用ScheduledTasks
创建new
。在这种情况下,您将不会使用spring创建的对象,因此自动装配将不起作用。您还应该在主类中连接ScheduledTasks
对象。
@SpringBootApplication
@EnableJms
public class ServerMain implements CommandLineRunner {
private static final Logger log = LogManager.getLogger(ServerMain.class);
@Autowired
private DBHandler db;
@Autowired
private ScheduledTasks tasks;
public static void main(String[] args) {
log.warn("from main");
ConfigurableApplicationContext context = SpringApplication.run(ServerMain.class, args);
}
@Override
public void run(String... strings) throws Exception {
log.info("starting run");
db.initDBTables();
tasks.start();
}