如何使用 Spring Boot 外部化配置?

它只是不工作。

我有

    MailTrainAPI mt = new MailTrainAPI();

    mt.sendMail(map);


...


@Component

public class MailTrainAPI {

    @Value("${mailtrain.url}")

    private String API;


    public void sendMail(MultiValueMap<String, String> map) {

        System.out.println("API = "+API);

        API = System.getProperty("mailtrain.api");

        System.out.println("API = "+API);

        API = System.getenv("mailtrain.api");

        System.out.println("API = "+API);

src/main/resources/application.properties

mailtrain.url=http://mail.galaxy.store/api/send/galaxybadge

它打印


API = null

API = null

API = null

它不起作用,因为我自己实例化了这个类,而 Spring 不知道它。如何application.properties手动访问文件中的属性?


弹簧引导 1.5.21


大话西游666
浏览 146回答 2
2回答

www说

MailTrainAPI应该是一个 Spring bean,又名组件,由于 自动扫描@Component,然后注入@Value("${mailtrain.url}").但是,当您调用 时,您自己创建了一个单独的类实例new MailTrainAPI()。不要那样做。您使用该对象的代码必须通过注入字段来接收它,例如@Autowired private&nbsp;MailTrainAPI&nbsp;mt;

叮当猫咪

我能够修复它public void sendMail(MultiValueMap<String, String> map) {&nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; setAPI();&nbsp; &nbsp; } catch (IOException e) {&nbsp; &nbsp; &nbsp; &nbsp; Logger.error(this.getClass(), "sendMail()", "Cannot send mail. Cannot load mailtrain.url property: " + e.getMessage());&nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; }&nbsp; &nbsp; if (API == null) {&nbsp; &nbsp; &nbsp; &nbsp; Logger.error(this.getClass(), "sendMail()", "Cannot send mail. Cannot load mailtrain.url property.");&nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; }&nbsp; &nbsp; System.out.println("API = "+API);&nbsp; &nbsp; ...private void setAPI() throws IOException {&nbsp; &nbsp; InputStream is = this.getClass().getResourceAsStream("/application.properties");&nbsp; &nbsp; Properties p = new Properties();&nbsp; &nbsp; p.load(is);&nbsp; &nbsp; API = p.getProperty("mailtrain.url");}但我认为会有一种更简单、更好的方法,而且绒毛更少。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java