봄철 Tomcat에서 제공하는 JNDI DataSource 사용방법
봄의 javadoc 기사에서 다음과 같은 내용이 있다고 합니다.DriverManagerDataSourceclass, 이 클래스는 매우 간단하고 추천할 만한 클래스입니다.
컨테이너에서 제공하는 JNDI 데이터 소스를 사용합니다.이런...
DataSource로서 드러날 수 있다DataSource봄 어플리케이션의 bean 콘텍스트JndiObjectFactoryBean
문제는 어떻게 하면 이 일을 해낼 수 있을까 하는 것입니다.
예를 들어, 내가 원하는 것은DataSource커스텀 MySQL 데이터베이스에 액세스하려면 무엇이 필요합니까?콘텍스트 설정 등에서는 무엇을 써야 합니까?
Spring의 XML 스키마 기반 구성을 사용하는 경우 Spring 컨텍스트에서 다음과 같이 설정합니다.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd">
...
<jee:jndi-lookup id="dbDataSource"
jndi-name="jdbc/DatabaseName"
expected-type="javax.sql.DataSource" />
또는 다음과 같은 간단한 bean 구성을 사용하여 설정합니다.
<bean id="DatabaseName" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/DatabaseName"/>
</bean>
다음과 같은 방법으로 Tomcat의 server.xml에서 JNDI 리소스를 선언할 수 있습니다.
<GlobalNamingResources>
<Resource name="jdbc/DatabaseName"
auth="Container"
type="javax.sql.DataSource"
username="dbUser"
password="dbPassword"
url="jdbc:postgresql://localhost/dbname"
driverClassName="org.postgresql.Driver"
initialSize="20"
maxWaitMillis="15000"
maxTotal="75"
maxIdle="20"
maxAge="7200000"
testOnBorrow="true"
validationQuery="select 1"
/>
</GlobalNamingResources>
Tomcat의 web context.xml에서 다음과 같이 JNDI 리소스를 참조합니다.
<ResourceLink name="jdbc/DatabaseName"
global="jdbc/DatabaseName"
type="javax.sql.DataSource"/>
레퍼런스 매뉴얼:
- Tomcat 8 JNDI 데이터 소스 사용 방법
- Tomcat 8 컨텍스트리소스 링크레퍼런스
- Spring 4 JE JNDI 조회 XML 스키마 참조
- 봄 4 JndiObjectFactoryBean 자바독
편집: 이 답변은 Tomcat 8 및 Spring 4에 대해 업데이트되었습니다.Tomcat의 기본 데이터 소스 리소스 풀 설정에 대한 몇 가지 속성 이름이 변경되었습니다.
Spring의 JavaConfig 메커니즘을 사용하면 다음과 같이 할 수 있습니다.
@Configuration
public class MainConfig {
...
@Bean
DataSource dataSource() {
DataSource dataSource = null;
JndiTemplate jndi = new JndiTemplate();
try {
dataSource = jndi.lookup("java:comp/env/jdbc/yourname", DataSource.class);
} catch (NamingException e) {
logger.error("NamingException for java:comp/env/jdbc/yourname", e);
}
return dataSource;
}
}
Tomcat 구성 내에 "sampleDS" 데이터 소스 정의가 있다고 가정하면 다음 행을 추가할 수 있습니다.applicationContext.xmlJNDI를 사용하여 데이터 소스에 액세스합니다.
<jee:jndi-lookup expected-type="javax.sql.DataSource" id="springBeanIdForSampleDS" jndi-name="sampleDS"/>
네임스페이스와 스키마 위치를 정의해야 합니다.jee프레픽스:
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd"
예제:
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDataSource"/>
앱 서버가 데이터 소스를 바인딩한 JNDI 이름을 찾으면 됩니다.이것은 완전히 서버 고유의 것입니다.방법에 대해서는, 서버의 문서를 참조해 주십시오.
잊지 말고 선언하는 것을 잊지 마십시오.jeeC.2.3 Jee 스키마에서 설명한 바와 같이 콩 파일 맨 위에 네임스페이스가 있습니다.
또 다른 기능: server.xml 대신 "Resource" 태그를 추가할 수 있습니다.
your_application/META-INF/Context.xml(tomcat docs에 따르면)은 다음과 같습니다.
<Context>
<Resource name="jdbc/DatabaseName" auth="Container" type="javax.sql.DataSource"
username="dbUsername" password="dbPasswd"
url="jdbc:postgresql://localhost/dbname"
driverClassName="org.postgresql.Driver"
initialSize="5" maxWait="5000"
maxActive="120" maxIdle="5"
validationQuery="select 1"
poolPreparedStatements="true"/>
</Context>
Apache Tomcat 7 JNDI Datasource HOW-TO 페이지에 따르면 web.xml에 리소스 구성이 있어야 합니다.
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
저는 좋아요.
봄 수업에서는 다음과 같이 주석을 단 콩을 주입할 수 있습니다.
@Autowired
@Qualifier("dbDataSource")
private DataSource dataSource;
context.xml에 추가합니다.
<beans:bean id="dbDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<beans:property name="jndiName" value="java:comp/env/jdbc/MyLocalDB"/>
</beans:bean>
다음을 사용하여 Tomcat의 server.xml에서 JNDI 리소스를 선언할 수 있습니다.
<Resource name="jdbc/TestDB"
global="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/TestDB"
username="pankaj"
password="pankaj123"
maxActive="100"
maxIdle="20"
minIdle="5"
maxWait="10000"/>
context.xml de spring으로 돌아가기
<ResourceLink name="jdbc/MyLocalDB"
global="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource" />
이 예시와 같이 데이터베이스에 연결을 삽입할 경우 MySQL jar가 tomcat lib 디렉토리에 있는지 확인하십시오.그렇지 않으면 Tomcat은 MySQL 데이터베이스 연결 풀을 만들 수 없습니다.
이 솔루션은 xml 설정을 완전히 삭제하는 데 매우 도움이 되었습니다.
JNDI 및 스프링 프레임워크를 사용하여 이 DB 구성을 확인하십시오.http://www.unotions.com/design/how-to-create-oracleothersql-db-configuration-using-spring-and-maven/
이 문서에서는 데이터베이스 jndi(db/test) 구성을 기반으로 한 DB Configuration 작성에 대해 설명합니다.설정이 완료되면 이 jndi를 사용하여 모든 DB 저장소가 로드됩니다.난 유용하다고 생각했어.만약 @Pierre가 이에 대해 문제가 있다면 알려주세요.DB 구성을 기술하는 완벽한 솔루션입니다.
언급URL : https://stackoverflow.com/questions/9183321/how-to-use-jndi-datasource-provided-by-tomcat-in-spring
'programing' 카테고리의 다른 글
| Vue.js 2.0 - vue 반응성의 혼란 (0) | 2022.07.18 |
|---|---|
| 매개 변수를 사용하여 Vue 라우터 변경 오류를 해결하는 방법 (0) | 2022.07.18 |
| C 컴파일러는 어떻게 구현합니까? (0) | 2022.07.18 |
| Vue는 사용하기 전에 소품에서 데이터를 기다립니다. (0) | 2022.07.18 |
| 휴지 상태에서의 지연 로딩이란 무엇입니까? (0) | 2022.07.18 |