每个人都知道我们是否要读取属性文件,我们可以执行以下操作:
@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集成。
问题是前面的代码只能读取我的项目类路径文件,但是我需要使用我的框架读取属性文件项目。我该怎么做?
对不起大家。也许我说不清楚,所以下面是图片:
我不使用SpringBoot
我想读取项目(使用我的框架)的类路径,而不是我的框架类路径。
谢谢。
答案 0 :(得分:0)
Spring框架可以从不同位置读取外部配置文件。 它可以从您的项目目录中读取配置文件,但是您需要删除以下行:
@PropertySource("classpath:/application.properties")
将其限制为您的应用程序类路径。 您可以检查here以查看从中读取配置文件的不同位置。
答案 1 :(得分:0)
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
答案 2 :(得分:0)
如果您只是想自己从类路径中读取属性,则可以使用
Properties prop = new Properties();
InputStream input = this.getClass().getResourceAsStream("/application.properties")
prop.load(input);
// get the property value and print it out
System.out.println(prop.getProperty("foo"));
答案 3 :(得分:0)
对于要扫描应用程序类路径外部的属性的非引导用户:
@PropertySource(“ file:/path/to/application.properties”) 对于网络托管的远程属性,“文件”可以替换为“ http”
答案 4 :(得分:0)
我使用下一个选项从任何地方加载属性文件,并将其放入环境中以通过 Environment#getProperty
或 @Value("name")
访问它:
@Configuration
public class MVCConfig {
@Autowired
private ConfigurableEnvironment env;
@PostConstruct
public void setup() {
Properties config = new Properties();
try (InputStream stream = this.getClass().getResourceAsStream("/custom.properties")) {
config.load(stream);
}
env.getPropertySources().addLast(new PropertiesPropertySource("mvc", config));
}
}