persistence.xml 파일 내의 환경 변수를 읽고 싶습니다.persistence.xml 파일의 환경 변수 읽기
아이디어는 속성 파일을 가져 오는 변경 사항이 있으므로 내 데이터베이스 세부 정보를 속성 파일에서 읽지 않으려한다는 아이디어입니다. 대신 환경 변수에서 세부 정보를 읽고 싶습니다.
이 기준을 달성 할 수있는 방법이 있습니까?
스프링을 사용하는 Iam 내 독립 실행 형 응용 프로그램이 유닉스 컴퓨터에 배포됩니다.
persistence.xml 파일 내의 환경 변수를 읽고 싶습니다.persistence.xml 파일의 환경 변수 읽기
아이디어는 속성 파일을 가져 오는 변경 사항이 있으므로 내 데이터베이스 세부 정보를 속성 파일에서 읽지 않으려한다는 아이디어입니다. 대신 환경 변수에서 세부 정보를 읽고 싶습니다.
이 기준을 달성 할 수있는 방법이 있습니까?
스프링을 사용하는 Iam 내 독립 실행 형 응용 프로그램이 유닉스 컴퓨터에 배포됩니다.
맵을 제공하여 지속성 단위의 속성을 업데이트 할 수 있습니다 (this 참조).
환경 변수는 편리하게 Map (this 참조)로 검색 할 수 있습니다.
둘을 함께 넣으면 지속성 단위의 속성을 환경 변수로 동적으로 업데이트 할 수 있습니다.
편집 : 간단한 예 ...
의 persistence.xml ... 업데이트가 환경 변수로 "기본"단위의 persistence.xml
<persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
<provider>
oracle.toplink.essentials.PersistenceProvider
</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="toplink.logging.level" value="INFO"/>
<property name="toplink.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="toplink.jdbc.url" value="jdbc:oracle:thin:@myhost:l521:MYSID"/>
<property name="toplink.jdbc.password" value="tiger"/>
<property name="toplink.jdbc.user" value="scott"/>
</properties>
</persistence-unit>
코드 ...
Map<String, String> env = System.getenv();
Map<String, Object> configOverrides = new HashMap<String, Object>();
for (String envName : env.keySet()) {
if (envName.contains("DB_USER")) {
configOverrides.put("toplink.jdbc.user", env.get(envName)));
}
// You can put more code in here to populate configOverrides...
}
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("default", configOverrides);
주입을 통해 생성 된 EM은 여기에서 다루지 않습니다. 더 나쁜 것은 EMF를 통해 생성 된 EM은 EXTENDED (예 : @PersistenceContext (type = PersistenceContextType.TRANSACTION)에 상응하는 EXTENDED와 반대되는 경우에만 해당)입니다. 따라서 트랜잭션 EM이 필요한 경우 주입을 사용해야합니다.
런타임에 persistence.xml 파일을 물리적으로 다시 작성할 수 있는지 궁금합니다. 문제는 하나의 파일을 재 작성하는 능력 (권한, META-INF 등에서 그것을 얻을 수 있음), 그리고 두 번째는 JPA에 의해 처음으로 열리기 전에 다시 쓰는 것입니다. 필드는 실제로 응용 프로그램 코드에 의해 참조됩니다.
hostname과 같은 데이터베이스 세부 정보는 persistence.xml에 정의되어서는 안됩니다. JNDI 조회를 사용하여 응용 프로그램 서버의 구체적인 데이터베이스 매개 변수를 정의하십시오. – home
안녕하세요, 저는 여기에 어떤 응용 프로그램 서버도 사용하지 않고 있습니다. 유감스럽게도 저는 persistence.xml 파일에 하드 코드 데이터베이스 정보가 필요한 독립 실행 형 응용 프로그램을 실행하고 있습니다. . – Ran
환경 변수 또는 persistence.xml에서 데이터베이스 세부 정보를 가져 오시겠습니까? 두 가지 모두에서 가져오고 싶다고 말하는 것처럼 보이지만, 완전히 명확하지는 않습니다. –