Springboot在application启动类中读取yml配置文件为null,启动获取配置的解决方案。

最近想在springboot中增加一个启动项,随着springboot的部署启动udp协议,然后我将对于udp的本地端口和服务器端的ip和端口等的配置放在yml,方便修改和配置。
当然,先把yml和取值的类写好。
以下是application.yml文件中的配置:

udp:
  mip: 127.0.0.1
  mport: 9999
  localport: 6125

以下是获取值的类:

@Component
public class udpClientGetTime(){
		@Value("${udp.mip}")
			public String mip;
}

然后就是将他放到启动项中。
1、new一个类。于是,我在启动项中new了一个我想要的类,然后失败了,获得的都是null,上网一搜索,发现new是行不通的。下面是错误示范。

@SpringBootApplication
@EnableScheduling
@ComponentScan()
public class DemoApplication extends SpringBootServletInitializer {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
		udpClientGetTime udpClientGetTime=new udpClientGetTime();
		System.out.println(udpClientGetTime.getMip);
	}

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
		System.out.println("外部tomcat,chapter启动!");
		return application.sources(DemoApplication.class);
	}
}

2、@Autowire,添加注释。还是不行,因为在将在application的启动类中,如果要注入一个类,好像必须要静态引用,不要问我为什么,我也不晓得。但是尴尬就尴尬在这,如果静态引用你用value获取的值,那是获取不到的,null。属性不能用static final等修饰。下面是错误示范。

@SpringBootApplication
@EnableScheduling
@ComponentScan()
public class DemoApplication extends SpringBootServletInitializer {
@Autowire
	static
	udpClientGetTime udpClientGetTime
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
		System.out.println(udpClientGetTime.getMip);
	}

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
		System.out.println("外部tomcat,chapter启动!");
		return application.sources(DemoApplication.class);
	}
}

3、在配置文件中继承启动类,将他做成一个启动项。突然想到,既然不能把想要开机启动的配置类引用到启动类里,那反过来呢?于是就想到,让想要开机启动的配置类继承启动类ApplicationRunner。可以,搞定,正解。

public class udpClientGetTime() implements ApplicationRunner{
		@Value("${udp.mip}")
			public String mip;
			………………
				@Override
	public void run(ApplicationArguments args) throws Exception {
		// TODO Auto-generated method stub
    	System.out.println(getMip());
	}
}

你可能感兴趣的:(springboot)