【问题标题】:Access property pf application.properties in outer Spring Boot Java Project外部 Spring Boot Java 项目中 application.properties 的访问属性
【发布时间】:2020-03-18 11:30:44
【问题描述】:

我结合使用 Spring Boot 和 Angular 在数据库中编写内容。现在我在 Spring Boot 项目中添加了一个 Java 项目,其中有一些方法被调用来访问与 Spring Boot 项目本身无关的服务器。 我的 Spring Boot application.properties 中有一些自己的属性(在标准路径 src/main/resources 中)

 prod=
 user=
 password= 

我想访问不属于 Spring Bean 本身的 Java 文件中的这些变量(因此 Java 文件不是控制器或存储库的一部分,只有从 Spring Boot 部分调用的方法) .

我尝试了@Value 注释,但它不起作用。 environment.getProperty() 也不起作用。

是否有其他方法可以简单地访问 Spring Boot 项目内部但不属于控制器等的普通 Java 文件中的 application.properties 的值/属性?

【问题讨论】:

    标签: java spring spring-boot


    【解决方案1】:

    application.properties:

    version=1.0
    name=TestApp
    date=2016-11-12
    

    读取文件:

    String rootPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
    String appConfigPath = rootPath + "application.properties";
    
    Properties appProps = new Properties();
    appProps.load(new FileInputStream(appConfigPath));
    
    String appVersion = appProps.getProperty("version");
    

    参考:https://www.baeldung.com/java-properties

    【讨论】:

      【解决方案2】:

      如果此解决方案适合您,您可以尝试将此类声明为@Component。这样,您可以使用自动装配从类中访问任何 bean。对于您的情况:

      @Autowired
      private Environment environment;
      
      String prodPropertyValue = environment.getProperty("prod");
      

      但不要忘记,如果您将类声明为组件,那么您不应该通过“new”运算符将其创建为常规类 - 使用自动装配。

      @Configuration
      @PropertySource({ "classpath:application.properties" })
      public class MailSenderConfiguration {
      
          @Bean
          public JavaMailSenderImpl mailSender(Environment env) {
              JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
      
              javaMailSender.setProtocol(env.getProperty("mail.protocol"));
              javaMailSender.setHost(env.getProperty("mail.host"));
              javaMailSender.setPort(Integer.parseInt(env.getProperty("mail.port")));
      
              return javaMailSender;
          }
      }
      

      这是一个小例子。

      【讨论】:

      • 我得到一个 NullPointerException 或环境为 null。
      • 当您没有正确配置您的应用程序时可能会发生这种情况。环境可能需要使用 @PropertySource 注释。尝试在此处或baeldung.com 上找到解决方案。此外,请确保具有 Environment 字段的类的实例是从 ApplicationContext 实例化的,而不仅仅是通过“new”运算符。
      • 我在答案中添加了一个示例
      猜你喜欢
      • 2021-05-17
      • 2020-06-22
      • 1970-01-01
      • 2017-10-20
      • 2019-07-16
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多