gpt4 book ai didi

java - 无法从 Spring Boot 应用程序 Autowiring yml 配置类

转载 作者:行者123 更新时间:2023-11-30 02:15:34 25 4
gpt4 key购买 nike

我无法@autowire spring boot中的一个类应用。以下是项目资源管理器快照:

enter image description here

来 self 的主课 CrmDisconnectionApplication ,我打电话DisconnectionConTrigger类(class)。在那堂课上我正在做@autowire对于 YamlConfig 。但我得到null pointer exception .

下面是代码:

<强> CrmDisconnectionApplication

package com.wpits.crm.disconnection;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.wpits.crm.disconnection.quartzJob.DisconnectionCronTrigger;

@SpringBootApplication(scanBasePackages = { "com.wpits.crm" })
public class CrmDisconnectionApplication {

public static void main(String[] args) {
SpringApplication.run(CrmDisconnectionApplication.class, args);
DisconnectionCronTrigger disconnectionCronTrigger = DisconnectionCronTrigger.getInstance();
disconnectionCronTrigger.initialize();
}

}

<强> DisconnectionCronTrigger

package com.wpits.crm.disconnection.quartzJob;

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.wpits.crm.disconnection.config.YamlConfig;
@Component
public class DisconnectionCronTrigger {

@Autowired
private YamlConfig myConfig;
private static DisconnectionCronTrigger obj = null;

private DisconnectionCronTrigger() {}

public static DisconnectionCronTrigger getInstance() {
if(obj == null) {
obj = new DisconnectionCronTrigger();
}
return obj;
}


public void initialize() {
System.out.println("using environment: " + myConfig.getEnvironment());
System.out.println("name: " + myConfig.getName());
System.out.println("servers: " + myConfig.getServers());
System.out.println("hobies: "+myConfig.getHobies());

JobDetail job = JobBuilder.newJob(DisconnectionJob.class).withIdentity("DisconnectionJob", "group1").build();

Trigger trigger = TriggerBuilder.newTrigger().withIdentity("cronTrigger", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?")).build();
try {
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
}catch(Exception ex) {
ex.printStackTrace();
}
}
}

<强> YamlConfig

package com.wpits.crm.disconnection.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.*;

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties


public class YamlConfig {
private String name;
private String environment;
private List<String> servers = new ArrayList<>();
private List<String> hobies = new ArrayList<>();

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEnvironment() {
return environment;
}
public void setEnvironment(String environment) {
this.environment = environment;
}
public List<String> getServers() {
return servers;
}
public void setServers(List<String> servers) {
this.servers = servers;
}
public List<String> getHobies() {
return hobies;
}
public void setHobies(List<String> hobies) {
this.hobies = hobies;
}
}

我得到null pointer exception对于线 System.out.println("using environment: " + myConfig.getEnvironment());上课DisconnectionCronTrigger 。我哪里弄错了。请纠正我..

最佳答案

问题出在这一行

DisconnectionCronTrigger disconnectionCronTrigger = DisconnectionCronTrigger.getInstance();

在 getInstance 中,您将使用 new 创建一个新对象。您不应该新建,而应该 Autowiring bean 或从 Spring 应用程序上下文中获取它。

 public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(CrmDisconnectionApplication.class, args);
DisconnectionCronTrigger disconnectionCronTrigger = (DisconnectionCronTrigger)context.getBean("disconnectionCronTrigger");
disconnectionCronTrigger.initialize();
}

如果你这样做,那么你将得到一个对象,该对象将 Autowiring bean 中的所有字段。如果你使用 new 创建一个对象,那么你就不会。

关于java - 无法从 Spring Boot 应用程序 Autowiring yml 配置类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48580902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com