首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从spring引导应用程序自动创建yml配置类。

无法从spring引导应用程序自动创建yml配置类。
EN

Stack Overflow用户
提问于 2018-02-02 10:40:16
回答 1查看 1.2K关注 0票数 1

我无法在@autowire应用程序中使用spring boot类。下面是项目资源管理器快照:

从我的主类CrmDisconnectionApplication,我调用DisconnectionConTrigger类。在那堂课上,我正在为@autowireYamlConfig。但我得到了null pointer exception

以下是代码:

CrmDisconnectionApplication

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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 exceptionSystem.out.println("using environment: " + myConfig.getEnvironment());行在班级DisconnectionCronTrigger。我哪里搞错了。请纠正我..。

EN

回答 1

Stack Overflow用户

发布于 2018-02-02 10:54:46

问题是这条线

代码语言:javascript
复制
DisconnectionCronTrigger disconnectionCronTrigger = DisconnectionCronTrigger.getInstance();

在getInstance中,您正在使用new创建一个新对象。您不应该执行新的操作,而应该使用自动更新bean或者从Spring应用程序上下文中获取它。

代码语言:javascript
复制
 public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(CrmDisconnectionApplication.class, args);
        DisconnectionCronTrigger disconnectionCronTrigger = (DisconnectionCronTrigger)context.getBean("disconnectionCronTrigger");
        disconnectionCronTrigger.initialize();
    }

如果您这样做,那么您将得到一个对象将在bean中的所有字段自动处理。如果使用new创建对象,则不会。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48580902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档