Java 是将适当的application.properties名称插入@PropertySource的方法吗?
spring+maven上有应用程序 我希望通过命令行传递不同配置文件的不同application.properties 我的数据库配置为:Java 是将适当的application.properties名称插入@PropertySource的方法吗?,java,spring,Java,Spring,spring+maven上有应用程序 我希望通过命令行传递不同配置文件的不同application.properties 我的数据库配置为: import org.apache.log4j.Logger; import org.hibernate.jpa.HibernatePersistenceProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annot
import org.apache.log4j.Logger;
import org.hibernate.jpa.HibernatePersistenceProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.annotation.Resource;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import java.util.Properties;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = {"data"})
@PropertySource("classpath:application.properties")
@ComponentScan(basePackages = {"data.persistence"})
public class PersistenceConfig {
private static final String PROP_DATABASE_DRIVER = "db.driver";
private static final String PROP_DATABASE_URL = "db.url";
private static final String PROP_DATABASE_USERNAME = "db.username";
private static final String PROP_DATABASE_PASSWORD = "db.password";
private static final String PROP_HIBERNATE_DIALECT = "db.hibernate.dialect";
private static final String PROP_HIBERNATE_SHOW_SQL = "db.hibernate.show_sql";
private static final String PROP_ENTITYMANAGER_PACKAGES_TO_SCAN = "db.entitymanager.packages.to.scan";
private static final String PROP_HIBERNATE_HBM2DDL_AUTO = "db.hibernate.hbm2ddl.auto";
@Resource
private Environment env;
protected final Logger log = Logger.getLogger(getClass());
...
}
如果我想为不同的服务器(qa和at)使用不同的配置文件,我需要创建两个类似这样的类,标记为@Profile(“qa”)和@Profile(“at”)
是否存在创建两个application.properties、将参数传递到命令行并在@(PropertySource)路径中插入qa或at application.properties的方法
是在启动应用程序之前将application.properties文件名插入@PropertySource的方法吗
在Spring Boot中,您可以使用配置文件名创建多个应用程序属性(或yaml)文件:
application-qa.properties
application-at.properties
每个都有特定于该环境的属性。然后只需将
--spring.profiles.active=qa
传递到您的应用程序,就可以只加载相应的属性文件。这样就不用维护多个Java类了。@PropertySource(value=“${configlocation}”)应该可以工作吗?然后,您可以将configlocation作为命令行arg()传递,您可以依赖于特定于概要文件的文件,并让Spring处理它们。看看这里,基本上你定义了不同的文件应用程序-{profile}.properties,然后在启动应用程序时,一个(或多个)profile处于活动状态,这些文件被加载。mvn package-Dgroups=“data.UnitTest”--spring.profiles.active=at1返回无法分析命令行选项:无法识别的选项:--spring.profiles.active=at1@Raffaele若在localTomcat上启动应用程序,是否需要将此参数添加到maven步骤?package-Dspring.profiles.active=at1?视情况而定。如果您通过Maven启动tomcat,那么您需要添加它(但不需要添加到包步骤)。否则,如果您有tomcat的本地实例,您可以将spring.profiles.active放在$CATALINA_HOME/conf/CATALINA.properties中(当然要避免-D)