Kotlin + Spring Boot 使用注解读取配置文件

Spring Boot简化了一大堆Spring中繁琐的xml配置文件,因此使用spring boot来搭建服务器项目的基础是最好不过的了,再加上最近kotlin大热,所以笔者就试着用Kotlin + Spring Boot来开发一个服务器,但是按照原来注解的用法,在kotlin项目却无法成功读取配置文件中的参数,这里就总结一下遇到的坑和解决的办法

首先我在java项目中需要声明了一个项目配置类ServerConfig:

@Component
@ConfigurationProperties("server")
public class ServerConfig{
  @Value("${server.host}")
  private String host;
}

然后需要用的时候

public class Test{
  @Autowired
  private ServerConfig ServerConfig;
  ...其他操作...
}

这样spring boot会自动帮我们将配置参数写入ServerConfig类

但是在kotlin项目就会出现问题:

1.@Value注解

平时在java中,使用@Value注解一般都是如下使用的:

@Value("${server.host"}")
private String host;

但是这样在kotlin中就会出现问题:
1.$符号是用于字符串模板化的,想要使用@Value注解就必须使用转义字符将$转义
2.在kotlin所有变量都是必须初始化的,要想延迟初始化,要么lazy by {...},要么在变量声明前加上lateinit关键字

所以最后在kotlin中的@Value注解正确姿势是:

@Value("\${server.host}")
lateinit var host: String

2.@Autowired注解

在java中,一般我们这样用@Autowired注解:

@Autowired
private ServerConfig serverConfig;

但由于我在kotlin项目中使用@Autowired初始化bean的时候一直失败,上网也找不到原因,网上的全是黏贴复制别人的,真的一点研究的精神都没有...所以我自己就想了一下,发现反正项目配置就是一个全局的变量,声明成静态类的话功能呢也一样的嘛,然后试了一下,发现成功了!!!
即最终的代码应改为:

//object 声明的是静态类,该类所有成员都是静态成员,只能ServerConfig.xxx()来调用
@Component
@ConfigurationProperties("server")
object ServerConfig {
    @Value("\${server.host}")
    lateinit var host: String

    @Value("\${server.port}")
    lateinit var port: String
}

@Autowired注解就不用了(233)

虽然最后控制台中会输出警告
深度截图_选择区域_20180228174755.png

但是配置文件中的参数还是能正常获取的.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容