초보자 웹 개발 단순 요약 (11) 관련 데이터베이스 연결 최적화 (데이터 소스 DataSource)

목차

머리말

하나는 DataSource입니다.

두 가지 일반적인 세 ​​가지 구현 방법

1. 기본 실현

2. 데이터베이스 연결 풀 구현

(1) DBCP

(2) C3P0

(3) HikariCP

(4) 드루이드

3. 분산 구현

세 가지 요약 


머리말

Xiaobai (8) -Database HSQLDB 인스턴스의 초보자 웹 개발 에 대한 간단한 요약 이 예제는 데이터베이스의 연결 및 해제에 많은주의를 기울이지 않았기 때문에 웹 애플리케이션 개발 프로세스를 간략하게 이해할 수 있도록했습니다. 이번에는이 부분에 대해 구체적으로 요약합니다.

다음 코드는 Xiaobai (8 개) 데이터베이스 HSQLDB 인스턴스의 초보자 웹 개발 에 대한 간단한 요약입니다. 이 예제는 데이터베이스에 연결하는 코드입니다.

public Statement createStatement() {
        try {
            Class.forName("org.hsqldb.jdbcDriver");
        } catch (ClassNotFoundException e) {
            System.out.println("jdbcDriver not found!!!");
            return null;
        }
        try {
            //JDBC不支持自增,创建或连接数据库
            connection = DriverManager.getConnection(jdbcUrl, jdbcUser, jdbcPassword);
            if (connection == null) {
                return null;
            }
            //创建里面的表
            Statement statement = connection.createStatement();
            return statement;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

여기서 사용되는 것은 데이터베이스와의 연결을 설정하는 DriverMananger의 getConnection ()이지만 데이터베이스와의 연결은 원래 리소스를 많이 소모하는 작업이며 많은 시스템 오버 헤드를 생성합니다. 따라서 데이터베이스에 대한 연결 풀이 있습니다. 자바의 쓰레드와 쓰레드 풀의 개념과 같다고 생각합니다. 쓰레드 풀은 쓰레드의 빈번한 생성과 소멸을 줄이기 위해 탄생했습니다. 그리고 데이터베이스 커넥션 풀은 데이터베이스의 빈번한 생성과 단절을 줄이는 것입니다. 만들어진.

하나는 DataSource입니다.

웹 애플리케이션이 데이터베이스에 액세스 할 때 데이터베이스에 직접 액세스하는 것이 아니라 일반적으로 데이터베이스 제조업체에서 제공하는 데이터베이스 드라이버를 통해 데이터베이스에 액세스합니다. 따라서 Java EE에서 JDBC 인터페이스를 제공하여 데이터베이스의 드라이버에 액세스하여 데이터베이스에 액세스합니다.

DataSource는 생성 된 데이터베이스의 연결을 관리하는 데이터베이스 연결 컨테이너입니다. 웹 애플리케이션이 데이터베이스에 액세스 할 때 DriverManager를 통해 데이터베이스에 연결할 필요가 없지만 DataSource에서 직접 Connection 개체를 가져옵니다. 그런 다음 데이터베이스에 연결합니다.

데이터베이스 드라이버와 함께 사용해야합니다. 일반적으로 세 가지 구현 양식이 있습니다.

  • (1) 기본 구현 : 표준 연결 개체를 생성하고 액세스하면 연결 풀링 및 배포를 지원하지 않는 새 연결이 생성됩니다.
  • (2) 데이터베이스 연결 풀 구현 : 연결 풀에 자동으로 참여하고 연결 풀 연결을 지원하지만 분산을 지원하지 않는 연결 개체를 생성합니다.
  • (3) 분산 구현 : 대부분 연결 풀 연결에 참여하는 분산 트랜잭션에 사용할 수있는 연결 개체를 생성합니다.

DataSource의 종류에 관계없이 기본 구성, 키 구성, 성능 구성 등 일부 구성을 수행해야합니다.

기본 구성에는 주로 데이터베이스에 액세스하기위한 url, 사용자 이름, 암호 및 driverClass가 포함됩니다.

주요 구성에는 주로 최소 연결 수, 초기 연결 수, 최대 연결 수 및 최대 대기 시간이 포함됩니다 (첫 번째 구현 방법에는 필요하지 않음).

성능 구성에는 주로 사전 캐싱 설정, 연결 유효성 감지, 시간 초과 연결 종료 설정 등이 포함됩니다.

두 가지 일반적인 세 ​​가지 구현 방법

다음은 각 애플리케이션 에 대한 간단한 요약이며, 초보 웹 개발 (8)-데이터베이스 HSQLDB 인스턴스간단한 요약 에서 언급 한 예제에 최적화되어 있습니다.

1. 기본 실현

Spring 자체는 간단한 데이터베이스 연결 Connection 객체를 제공 할 수있는 org.springframework.jdbc.datasource.DriverManagerDataSource를 제공합니다. getConnection ()이 호출 될 때마다 새 연결이 생성됩니다. 단위 테스트 또는 간단한 독립 실행 형 응용 프로그램에 더 적합합니다.

  • DriverManagerDataSource 자체가 springframework와 함께 제공되기 때문에 pom.xml에 종속성을 추가해야합니다.
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.5.RELEASE</version>
        </dependency>
#hsqldb的相关配置
#最后会在apache/bin的目录下生成该数据库
jdbc.url = jdbc:hsqldb:file:db/hsqldb/xbook
jdbc.user = SA
jdbc.password =
jdbc.table = book
jdbc.driverClass=org.hsqldb.jdbcDriver
  • resources / config 아래에 application-context-db.xml 파일을 추가하여 DriverManagerDataSource JavaBean을 구성하십시오.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--增加数据库配置的配置文件-->
    <context:property-placeholder location="classpath:config/jdbc.properties"/>

    <!--简单的一个连接,每次都会新建-->
    <bean id="driverManagerDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="driverClassName" value="${jdbc.driverClass}"/>
    </bean>

 </beans>

이 DriverManagerDataSource는 매번 새로운 Connection을 생성하기 때문에 데이터베이스 연결 풀이 아니므로 데이터베이스 연결 풀과 관련된 매개 변수를 구성 할 필요가 없습니다. 특히 성능 향상 등을 위해 프로젝트에서 구성해야하는 중요한 매개 변수는 향후 연구 될 예정입니다.

  •  이러한 DataSource 인스턴스를 가져 오려면 JdbcDataSource를 늘리십시오.
@Component
public class JdbcDataSource { 
    private DriverManagerDataSource driverManagerDataSource;

    public void setDriverManagerDataSource(DriverManagerDataSource driverManagerDataSource{
        this.driverManagerDataSource = driverManagerDataSource;
    }

    @PostConstruct
    public void init() {
        System.out.println("JdbcTemplate init  。。。。。。 ");
    }

    public DataSource createDriverManagerDataSource() {
        return driverManagerDataSource;
    }
}
  • 그런 다음 application-context-db.xml 파일에서 DriverManagerDataSource와 JdbcDataSource 간의 종속성도 늘립니다.

    <!--处理数据库连接的bean-->
    <bean id="jdbcConfiguration" class="com.wj.hsqldb.datasource.JdbcDataSource">
        <property name="driverManagerDataSource" ref="driverManagerDataSource"/>
    </bean>

남은 질문 : 구성 종속성을 완료하기 위해 setDriverManagerDataSource () 메서드를 추가해야하는 이유는 무엇입니까? (  확률은 리플렉션 관계로 인해 종속성 바인딩과 관련이 있으며 리플렉션 프로세스는 setxxx 메서드를 통해 해당 종속성을 찾는 것입니다. 관계의 속성).

  • 마지막으로 Spring 프로젝트의 web.xml 파일에서 application-context-db.xml을 읽고 Spring IoC 컨테이너가 이러한 JavaBeans를로드하도록해야합니다.
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:config/application-context*.xml</param-value>
    </context-param>

이 단계 후에 프로젝트에서 driverManagerDataSource DataSource 인스턴스를 직접 사용할 수 있습니다. 그런 다음 DriverManager.getConnection ()을 통해 이전 com.wj.hsqldb.db.JdbcConfiguration을 driverManagerDataSource.getConnection ()으로 바꿉니다.

2. 데이터베이스 연결 풀 구현

웹 응용 프로그램이 시작되면 데이터베이스 연결 풀은 특정 수의 데이터베이스 연결을 만들고 최대 연결 수 이상을 유지합니다. 웹 응용 프로그램이 데이터베이스에 액세스 할 때 데이터베이스 연결 풀에서 사용하지 않는 데이터베이스 연결을 찾아 연결을 사용 중으로 표시합니다. 사용 가능한 연결이 없으면 새 데이터베이스 연결이 생성됩니다. 사용 중일 때 데이터베이스 연결 후 사용이 끝나면 데이터베이스의 연결 풀이 연결을 사용 가능으로 표시 한 다음 웹 응용 프로그램에 액세스 할 때 다시 사용할 수 있습니다.

이 과정에서 스레드 풀의 작동 메커니즘이 실제로 Java와 동일하다는 것을 알 수 있으므로 이곳을 이해하는 것은 어렵지 않습니다. 따라서 DataSource의 장점은 다음과 같습니다.

  • 1) 자주 데이터베이스 연결 및 연결 해제를 설정할 필요가 없으므로 리소스와 시간이 절약됩니다.
  • 2) 데이터베이스에 연결하기 위해 사용자 이름과 암호를 자주 입력 할 필요가 없으므로 메모리 및 CPU 오버 헤드가 절약됩니다.

Java에서 일반적으로 사용되는 오픈 소스 데이터베이스 연결 풀은 다음과 같습니다.

(1) DBCP

Jakarta commons-pool 개체 풀 메커니즘에 의존하는 데이터베이스 연결 풀. 웹 애플리케이션에서 직접 사용할 수 있습니다. DBCP는 Tomcat에서 사용됩니다. 해당 구현 클래스는 org.apache.commons.dbcp.BasicDataSource입니다.

DriverManagerDataSource와 동일한 Spring 프로젝트를 사용하는 과정에서 종속성을 도입하고 차례로 구성 파일을 추가 한 다음 프로젝트에서 직접 사용해야합니다.

  • 1) BasicDataSource의 종속성 추가
        <!--DBCP数据源的配置-->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
  • 2) BasicDataSource의 JavaBean을 (1) Basic Implementation 의 application-context-db.xml에 추가하고 JdbcDataSource 종속성에 추가하십시오.
    <!--配置DBCP数据源-->
    <bean id="dbcpDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="username" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="driverClassName" value="${jdbc.driverClass}"/>

        <property name="maxActive" value="6"/>
        <property name="maxIdle" value="3"/>
    </bean>
    <!--处理数据库连接的bean-->
    <bean id="jdbcConfiguration" class="com.wj.hsqldb.datasource.JdbcDataSource">
        <property name="dbcpDataSource" ref="dbcpDataSource"/>
        <property name="driverManagerDataSource" ref="driverManagerDataSource"/>
    </bean>

BasicDataSource에 의해 생성 된 데이터베이스의 연결 풀로 인해 최소 연결 수, 초기 연결 수 등과 같은 일부 주요 매개 변수를 구성해야하며 여기서 조사하지 않도록해야합니다. 데이터베이스에 액세스하는 웹 애플리케이션의 성능에 대한 이러한 매개 변수의 구성은 영향을 미칩니다.

또한 BasicDataSource의이 속성을 JdbcDataSource에 추가하려면 (1) 기본 구현에 추가 된 JdbcDataSource 에서 둘 사이에 종속성을 추가 해야합니다  . 그렇지 않으면 여기에 JdbcDataSource의 두 인스턴스가 있고 다른 인스턴스에 있습니다. 정의되지 않은 속성은 사용할 수 없습니다.

  • 3) JdbcDataSource에 해당 인스턴스 BasicDataSource 추가
@Component
public class JdbcDataSource {
    private BasicDataSource dbcpDataSource;
    private DriverManagerDataSource driverManagerDataSource;

    public void setDbcpDataSource(BasicDataSource dbcpDataSource) {
        this.dbcpDataSource = dbcpDataSource;
    }

    public void setDriverManagerDataSource(DriverManagerDataSource driverManagerDataSource{
        this.driverManagerDataSource = driverManagerDataSource;
    }

    @PostConstruct
    public void init() {
        System.out.println("JdbcTemplate init  。。。。。。 ");
    }

    public DataSource createBasicDataSource() {
        return dbcpDataSource;
    }

    public DataSource createDriverManagerDataSource() {
        return driverManagerDataSource;
    }
}

이 단계 후에 프로젝트에서 dbcpDataSource의 DataSource 인스턴스를 직접 사용할 수 있습니다. 그런 다음 DriverManager.getConnection ()을 통해 이전 com.wj.hsqldb.db.JdbcConfiguration을 dbcpDataSource.getConnection ()으로 바꾸고 이제 데이터베이스 연결 풀을 사용하여 연결을 만듭니다. 

(2) C3P0

DBCP보다 더 풍부한 구성을 가지고 있으며 해당 구현 클래스는 com.mchange.v2.c3p0.ComboPooledDataSource입니다. 구체적인 사용법은 위와 동일하므로 프로젝트의 application-context-db.xml과 JdbcDataSource의 관련 코드를 참조하십시오.

(3) HikariCP

속도는 C3P0보다 높고, 바이트 코드는 더 간결하며, 더 많은 코드를 캐시에로드 할 수 있으며, 잠금없는 수집 유형을 실현할 수 있습니다. SpringBoot2에서 기본적으로 사용되는 데이터베이스 연결 풀입니다.

(4) 드루이드

Alibaba 제품, Taobao 및 Alipay 전용 데이터베이스 연결 풀은 Oracle, MySql, Postgresql 등 모든 JDBC 호환 데이터베이스, 해당 구현 클래스 com.alibaba.druid.pool.DruidDataSource를 지원합니다. DBCP 및 C3P0을 대체하여 효율적이고 강력하며 확장 가능한 데이터베이스 연결 풀을 제공합니다.

여기에는 세 부분이 포함됩니다.

  • DruidDriver : 에이전트 드라이버, 데이터베이스의 액세스 성능을 모니터링 할 수 있습니다.
  • DruidDataSource : 효율적이고 관리 가능한 데이터베이스 연결 풀
  • SQLParse : SQL 실행 로그를 가져옵니다.

구체적인 사용법은 위와 동일하므로 프로젝트의 application-context-db.xml 및 JdbcDataSource의 관련 코드를 참조하십시오.

위의 네 가지 데이터 소스를 구성한 후 마지막으로 수정 된 파일의 코드는 다음과 같습니다.

  • 1) pom.xml에 의해 추가 된 종속성은 다음과 같습니다.
  <!--jdbc接口 Spring对JDBC的封装-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.5.RELEASE</version>
        </dependency>
        <!-- === 配置数据源  ==== -->
        <!--c3p0数据源-->
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
        <!--DBCP数据源的配置-->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <!--druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.5</version>
        </dependency>
  •  2) application-context-db.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--增加数据库配置的配置文件-->
    <context:property-placeholder location="classpath:config/jdbc.properties"/>

    <!--简单的一个连接,每次都会新建-->
    <bean id="driverManagerDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="driverClassName" value="${jdbc.driverClass}"/>
    </bean>

    <!--数据库连接池-->

    <!--配置C3P0数据源-->
    <bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="user" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="driverClass" value="${jdbc.driverClass}"/>

        <property name="initialPoolSize" value="3"/>
        <property name="maxPoolSize" value="6"/>
    </bean>
    <!--配置DBCP数据源-->
    <bean id="dbcpDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="username" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="driverClassName" value="${jdbc.driverClass}"/>

        <property name="maxActive" value="6"/>
        <property name="maxIdle" value="3"/>
    </bean>
    <!--阿里的-->
    <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="username" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="driverClassName" value="${jdbc.driverClass}"/>
    </bean>

    <!--处理数据库连接的bean-->
    <bean id="jdbcConfiguration" class="com.wj.hsqldb.datasource.JdbcDataSource">
        <property name="c3p0DataSource" ref="c3p0DataSource"/>
        <property name="dbcpDataSource" ref="dbcpDataSource"/>
        <property name="driverManagerDataSource" ref="driverManagerDataSource"/>
        <property name="druidDataSource" ref="druidDataSource"/>
    </bean>

</beans>
  • 3) JdbcDataSource
@Component
public class JdbcDataSource {
    private ComboPooledDataSource c3p0DataSource;
    private BasicDataSource dbcpDataSource;
    private DriverManagerDataSource driverManagerDataSource;
    private DruidDataSource druidDataSource;

    public void setC3p0DataSource(ComboPooledDataSource c3p0DataSource) {
        this.c3p0DataSource = c3p0DataSource;
    }

    public void setDbcpDataSource(BasicDataSource dbcpDataSource) {
        this.dbcpDataSource = dbcpDataSource;
    }

    public void setDriverManagerDataSource(DriverManagerDataSource driverManagerDataSource{
        this.driverManagerDataSource = driverManagerDataSource;
    }

    public void setDruidDataSource(DruidDataSource druidDataSource) {
        this.druidDataSource = druidDataSource;
    }

    @PostConstruct
    public void init() {
        System.out.println("JdbcTemplate init  。。。。。。 ");

    }

    public DataSource createComboPoolDataSource() {
        return c3p0DataSource;
    }

    public DataSource createBasicDataSource() {
        return dbcpDataSource;
    }

    public DataSource createDriverManagerDataSource() {
        return driverManagerDataSource;
    }

    public DataSource createDruidDataSource() {
        return druidDataSource;
    }
}

관련 코드가 github에 업로드되었습니다 : https://github.com/wenjing-bonnie/sql-web.git 해당 태그는 example11의 관련 코드입니다 (프로젝트는 항상 업데이트 되므로이 코드는 태그로 표시됩니다. ) .

3. 분산 구현

복잡한 웹 애플리케이션 개발에서 애플리케이션은 여러 데이터베이스, 즉 여러 데이터 소스에 연결하는 것을 포함 할 수 있습니다. 일반적으로 사용되는 두 가지 일반적인 시나리오를 나열합니다.

  • 1) 읽기-쓰기 분리 데이터베이스 : 읽기 데이터베이스는 다양한 쿼리 작업 만 담당하고 쓰기 데이터베이스는 추가, 삭제 및 수정을 담당합니다.
  • 2) 복잡한 비즈니스 : 비즈니스 프로세스는 두 데이터베이스의 데이터를 동시에 읽거나 수정해야 할 수 있습니다.

이러한 종류의 다중 데이터 소스 응용 프로그램은 일반적인 분산 시나리오입니다. Spring 프로젝트에서 spring-jdbc는 개발자가 정의한 규칙에 따라 런타임 동안 현재 데이터 소스에 동적으로 액세스 할 수있는 여러 DataSource를 포함 할 수있는 org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource를 제공합니다.

이 AbstractRoutingDataSource를 프로젝트에서 사용하는 방법은 프로젝트에 따라 살펴 보겠다고 생각합니다. 이제 여러 데이터 소스를로드 할 수 있다는 것을 알고 있지만 프로젝트에서 사용하는 방법은 프로젝트에서 따라야합니다.

남은 질문 : 프로젝트에서 여러 데이터 소스를 사용하는 방법은 무엇입니까? ?

세 가지 요약 

코드 예제 작성 과정에서 발생하는 문제 요약 :

1. Spring 및 xml 구성 JavaBean에서 어노테이션 혼합 사용

웹 애플리케이션 개발에서 일부 JavaBean은 주석을 통해 인스턴스화되고 일부 JavaBean은 xml을 통해 구성됩니다. 그러면 @Component에서 주석이 달린 클래스에 나타납니다. xml로 구성된 인스턴스를 참조하는 방법은 무엇입니까? ?

@AutoWrited는 유형에 따라 자동으로 주입되고 @Resource는 이름에 따라 자동으로 주입됩니다. 두 가지 중요한 속성이 있습니다 : 이름과 유형 :이 두 속성이 지정되지 않은 경우 기본적으로 이름으로 검색됩니다.

@Resource에서 이름은 구성된 xml 파일의 <bean id = ""/>가 아닌 <bean name = ""/>과 일치해야합니다. 일치하는 Bean이 없으면 기본 유형으로 대체됩니다. ; type 속성에 따라 검색하면 삽입 할 유형이 일치하는 유일한 Bean을 찾을 수 있습니다. 찾을 수 없거나 둘 이상인 경우 예외가 발생합니다. 둘 다 일치하면 유일한 Bean을 찾습니다. matching, 찾을 수없는 경우 예외를 발생시킵니다.

@Resource는 @Autowired와 동일하지만, @Autowired는 byType에 따라 자동으로 주입되고 @Resource는 기본적으로 byName에 따라 자동으로 주입됩니다. @Autowired와 @Resource 모두 빈을 어셈블하는 데 사용할 수 있으며 둘 다 필드 또는 setter 메서드에 쓸 수 있습니다.

예를 들어 BookManagerJdbcService.java의 xml에 구성된 JdbcDataSource를 사용하려는 경우 다음 코드가 있습니다.

@Configuration
public class BookManagerJdbcService {
    @Resource(type = JdbcDataSource.class, name = "jdbcDataSource")
    private JdbcDataSource jdbcDataSource;
}

application-context-db.xml의 코드는 다음과 같습니다.

    <!--处理数据库连接的bean-->
    <bean id="jdbcDataSource" class="com.wj.hsqldb.datasource.JdbcDataSource" name="jdbcDataSource">
        <property name="c3p0DataSource" ref="c3p0DataSource"/>
        <property name="dbcpDataSource" ref="dbcpDataSource"/>
        <property name="driverManagerDataSource" ref="driverManagerDataSource"/>
        <property name="druidDataSource" ref="druidDataSource"/>
    </bean>

 이러한 방식으로 BookManagerJdbcService.java에서 jdbcDataSource 인스턴스를 직접 사용할 수 있습니다.

2. 웹 애플리케이션은 데이터베이스에 직접 액세스하지 않지만 JDBC 인터페이스를 통해 데이터베이스 드라이버에 액세스하여 데이터베이스에 액세스합니다.

3. 데이터베이스 드라이버는 일반적으로 데이터베이스 제조업체에서 제공하며 데이터베이스 액세스 논리뿐만 아니라 기본 네트워크 통신도 포함합니다.

4. DataSource는 데이터베이스에 연결하기위한 데이터베이스 연결을 제공하는 데이터 소스입니다.

5. DataSource는 한 번에 하나의 Connection 만 제공하는 것, 두 번째는 데이터베이스 연결 풀 (스레드 풀의 개념과 유사), 세 번째는 분산 데이터 소스의 세 가지 유형으로 나뉩니다.

6. 일반적으로 DataSource는 데이터베이스 URL, 사용자 이름, 암호 및 driverClass의 기본 구성과 일부 성능 구성 및 주요 구성을 구성해야합니다.

물론 나중에 점차 이해해야 할 몇 가지 문제가 남아 있습니다.

1. 구성 종속성을 완료하기 위해 setDriverManagerDataSource () 메서드를 추가해야하는 이유는 무엇입니까? 

2. 프로젝트에서 여러 데이터 소스를 사용하는 방법은 무엇입니까? ?

다음 기사는 Xiaobai (12) 관련 데이터베이스 연결 최적화 (트랜잭션 관리)의 초보 웹 개발에 대한 간단한 요약 을 요약하는 것입니다.

 

추천

출처blog.csdn.net/nihaomabmt/article/details/114300190