当前位置: 首页 > 知识库问答 >
问题:

如何在Spring中读取外部属性文件?

沈栋
2023-03-14

每个人都知道如果我们想要读取属性文件,我们可以这样做:

@Configuration
@PropertySource("classpath:/application.properties")
public class AppConfig {

    @Value("${app.name}")
    public String name;


    @Bean
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }

    @Bean
    public PostService postService() {
        return new PostServiceImpl(name);
    }

}

但是,现在我有了一个类似于SpringBoot的框架。它可以将Spring与Mybatis集成在一起。

问题是前面的代码只能读取我的项目类路径文件,但我需要使用我的框架读取project属性文件。我是怎么做的?

共有1个答案

齐献
2023-03-14

Spring提供外部配置。这样您就可以在不同的环境中运行您的应用程序。

参考链接:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

如果您不喜欢application.properties作为配置文件名,则可以通过指定Spring.config.name环境属性来切换到另一个文件名。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;

@Configuration
@PropertySource("classpath:db.properties")
@PropertySource("classpath:project.properties")
public class DBConfiguration {

@Autowired
Environment env;

  @Bean
  public DBConnection getDBConnection() {
    System.out.println("Getting DBConnection Bean for 
    App:"+env.getProperty("APP_NAME"));
    DBConnection dbConnection = new DBConnection(env.getProperty("DB_DRIVER_CLASS"), 
     env.getProperty("DB_URL"), env.getProperty("DB_USERNAME"), 
     env.getProperty("DB_PASSWORD").toCharArray());
    return dbConnection;
  }

 }

DB.properties:
#Database configuration
DB_DRIVER_CLASS=com.mysql.jdbc.Driver
DB_URL=jdbc:mysql://localhost:3306/Test
DB_USERNAME=root
DB_PASSWORD=root

project.properties:
APP_NAME=TEST APP
 类似资料:
  • 问题内容: 有谁知道如何在Maven中读取文件。我知道有多种方法可以使用资源过滤来读取属性文件并从中设置值,但是我想要在中使用以下方法: 问题答案: 试用 Properties Maven插件

  • 问题内容: 在我的目标文件夹中,有2个文件夹,lib和conf。所有的属性文件都放在conf文件夹中,而jars放在lib foulder中。 在Spring Boot之前,我们在spring.xml中使用以下配置来使用@value 但是在spring启动中,我不知道如何在Java代码中执行相同的操作。 我尝试了以下操作,但是没有用 问题答案: 问题的标题和描述让我有些困惑。希望我不会再让你对我的

  • 问题内容: 我们为我们的一个应用程序提供了一个连接池组件(JAR文件)。截至目前,应用程序连接详细信息捆绑在JAR文件中(在文件中)。 我们可以使其更通用吗?我们可以让客户端告诉属性文件详细信息(路径和文件名),然后使用JAR来获得连接吗? 客户端代码中包含以下内容是否有意义: 与此同时,客户端将指定(以某种方式???)属性文件详细信息,其中包含要连接的URL,超时等。 问题答案: http://

  • 问题内容: 在发布此问题之前,我用Google搜索Spring项目(不是基于Web的项目)中的属性。我很困惑,因为每个人都在谈论application- context.xml并具有类似的配置 但是,我正在使用Spring进行普通的Java项目(没有Web应用程序之类的东西)。但是我想从属性文件中获取一些通用属性,并且需要在JAVA文件中使用。如何通过使用Spring / Spring注释实现此目

  • 我有这样的配置,需要用于Spring Boot应用程序。 默认情况下,spring-boot会拾取位于src/main/resources/中的application.properties文件 我想改变这个路径并将Spring Boot到不同的application.properties文件 我可以使用 有没有任何替代的解决方案,我可以做到这一点,而不通过命令行传递参数? 在我的主要班级 在我尝试

  • 问题内容: 我有一个JAR文件,我的所有代码都已存档以便运行。我必须访问一个属性文件,每次运行前都需要对其进行更改/编辑。我想将属性文件保留在JAR文件所在的目录中。无论如何,有没有告诉Java从该目录中提取属性文件? 注意:我不想将属性文件保留在主目录中或在命令行参数中传递属性文件的路径。 问题答案: 因此,你希望将与主/可运行jar相同文件夹中的文件视为文件,而不是作为主/可运行jar的资源。