2016-08-15 5 views
2

배경Java : 런타임시 데이터베이스의 속성을 ResourceBundle에 추가하려면 어떻게합니까?

내가 메이븐을 사용하여 Java 웹 응용 프로그램을 개발하고있다. 이 경로와 형식으로 ResourceBundles를 만들었습니다 : src/main/resources/i18n/LanguageBundle_xx_XX.properties.

모든 것이 완벽하게 작동하며 모든 것이 프런트 엔드에서 작동합니다 (JSTL 사용).

문제

다음 형식으로 MySQL 데이터베이스에 저장되어있는 프론트 엔드에서, 키/값 쌍을 만들 수있는 사용자 : KEY | VALUE

사용자에게 첫 번째 JSP 페이지를 가져 오기 전에 모든 설정을 수행하는 초기화 서블릿이 있습니다.

서블릿을 초기화 할 때 데이터베이스에서 모든 KEY/VALUE 쌍을 얻었으나 이제는이를 언어 번들에 추가하여 첫 번째 JSP 페이지가 표시 될 때 번역이 준비되도록합니다.

지금까지 시도했다 :

  1. 는 DB
  2. 순회에서 모든 키/값 쌍을 반환 KEY는
  3. LanguageBundle_xx_XX에 존재하지 않는 경우 값은
  4. 을 반환 KEY/VALUE에 속성을 추가합니다. put ("KEY", "VALUE")

이제는 속성을 추가하지만 해당 범위 외부의 특정 속성 (예 : 다른 서블릿, JSP)에 액세스하려고 시도하면 특정 .properties 파일에 존재하지 않으므로 실패합니다.

어떻게이 문제를 해결할 수 있습니까?

+0

지금까지 작성한 것은 ResourceBundle이 아니라 특성 파일입니다. * Object * 인 ResourceBundle을 만드는 다양한 방법을 조사해야합니다. – EJP

+0

나는 @EJP 생각에 약간의 장점이있다. 나는 똑같이했다. 문제는 속성 파일이 아니며 파일에서 읽는 것뿐만 아니라 데이터베이스에서도 읽을 수 있도록 resourcebundle을 만드는 것이 문제입니다. http://stackoverflow.com/questions/2451049/do-resource-bundles-in-java-support-runtime-string-substitution을 참조하십시오. –

답변

1

업데이트 : 작동하는 솔루션으로 올라와있다

.

Properties prop = new Properties(); 
    InputStream in = getClass().getResourceAsStream("/i18n/LanguageBundle_en_US.properties"); 
    prop.load(in); 
prop.setProperty("KEY", "VALUE"); 
in.close(); 
prop.store(new FileOutputStream(getClass().getClassLoader().getResource("/i18n/LanguageBundle_en_US.properties").getFile()), null); 

누군가가 나쁜 행동인지 또는 사용하기에 괜찮습니까?

감사합니다.

+0

리소스는 파일이 아니며 읽기 전용 일 수 있습니다. – EJP

+0

다음 번에 좋지 않을 수도있는 기존 파일을 덮어 쓰고 있습니다. 나는 당신이 메모리의 값을 수정하는 방법을 찾아야한다고 생각한다. – pmcevoy12

+0

다시 연락해 주셔서 감사합니다. 나는 실제를 덮어 쓴다.속성 파일은 대상 폴더에서만 발생합니다. KEY | VALUE 쌍은 내가 추가 할 마지막이자 유일한 속성입니다. 당신의 걱정을 볼 수 있습니다. 나는 지금 당장 그것을 일하게두고 나중에 단계로 돌아갈 것이다. 더 나은 해결책을 생각해 내 대답을 업데이트 할 것입니다. 좋은 하루 되세요. – RasmusF