首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取环境变量并通过SonarLint的正确方法

获取环境变量并通过SonarLint的正确方法
EN

Stack Overflow用户
提问于 2018-06-25 21:06:36
回答 1查看 711关注 0票数 4

我在读取环境变量和满足SonarLint(检测并修复质量问题)的同时遇到了问题。这样它就不起作用了,我的变量为null

代码语言:javascript
复制
 private String accessKey;
 @Value("${bws.access.key}")
public void setAccessKey(String ak){
    accessKey=ak;
}

将方法更改为static (按照sonarLint的建议)不会对变量continuous起作用

代码语言:javascript
复制
private static String accessKey;
  @Value("${bws.access.key}")
public static void setAccessKey(String ak){
    accessKey=ak;
}

我发现唯一有效的方法是将实例变量标记为静态,而不是将方法标记为静态

代码语言:javascript
复制
private static String accessKey;
  @Value("${bws.access.key}")
public void setAccessKey(String ak){
    accessKey=ak;
}

但是sonarLint指出了实例方法不应该写入“静态”字段的问题

这种方式不是让我的环境变量跨越边界,而不是正确的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-25 22:35:03

您可以使用以下代码:

一个Configuration类(使用@Component注释,以便由Spring拾取),它将保存来自属性文件的值,在该文件中,您可以将bws.access.key的值直接绑定到属性。如果你需要accessKey的访问器方法,你可以直接创建它们(setAccessKeygetAccessKey)

代码语言:javascript
复制
@Component
public class ConfigClass {

    // @Value("${bws.access.key:<no-value>}")  // <- you can use it this way if you want a default value if the property is not found
    @Value("${bws.access.key}")                // <- Notice how the property is being bind here and not upon the method `setAccessKey`
    private String accessKey;

    // optional, in case you need to change the value of `accessKey` later
    public void setAccessKey(String ak){
        this.accessKey = ak;
    }

    public String getAccessKey() {
        return this.accessKey;
    }

}

有关更多详细信息,请查看此GitHub sample project

我用以下命令进行了测试

Build #IU-181.5281.24

  • SonarLint

  • IntelliJ IDEA 2018.1.5 (旗舰版)

(Edit)如何在控制器中使用它

一个选项(还有其他选项)可以是为控制器声明一个构造函数(让我们称其为SampleController),并在其中请求一个ConfigClass类型的参数。现在,我们将一个相同类型的控制器属性(config)设置为作为参数接收的值,如下所示:

代码语言:javascript
复制
@RestController
public class SampleController {

    private final ConfigClass config;

    public SampleController(ConfigClass configClass) { // <- request the object of type ConfigClass
        this.config = configClass; // <- set the value for later usage
    }

    @RequestMapping(value = "test")
    public String test() {
        return config.getAccessKey();  // <- use the object of type ConfigClass
    }
}

现在,Spring Boot将尝试在ConfigClass类型的应用程序中找到一个组件(任何类型),因为我们已经定义了一个组件,它会自动将其注入我们的控制器中。这样,您就可以将参数控制器属性config设置为在configClass中接收到的值,以供以后使用。

为了测试它,您可以请求url test。您将看到输出将为anotherValue。因此,我们可以得出结论,依赖注入机制成功地找到了ConfigClass的一个实例,并且ConfigClass#getAccessKey方法工作正常。

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

https://stackoverflow.com/questions/51024223

复制
相关文章

相似问题

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