Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是将适当的application.properties名称插入@PropertySource的方法吗?_Java_Spring - Fatal编程技术网

Java 是将适当的application.properties名称插入@PropertySource的方法吗?

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

spring+maven上有应用程序

我希望通过命令行传递不同配置文件的不同application.properties

我的数据库配置为:

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)