<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      背景

      springboot憑借其高度的封裝性,極大地簡化了我們的開發。對于單體項目,為了提高后期線上的運維效率我們通常選擇采用war包的方式進行部署。當遇到多給項目,為了實現統一的數據源管理,我們公司將多個項目的數據源都配置在tomcat的配置文件里以實現數據源的統一管理。那么對于springboot這樣高度集成的項目,該如何實現讀取外部tomcat的數據源功能呢?

      springboot項目打war包

      pom文件

      <groupId>com.ai</groupId>
          <artifactId>ORCA</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <name>ORCA</name>
          <!-- 設置打包方式為war -->
          <packaging>war</packaging>
          <description>虎鯨</description>
      
          <properties>
              <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
              <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
              <java.version>1.8</java.version>
          </properties>
      
          <dependencies>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
                  <!-- 排除springboot自帶tomcat -->
                  <exclusions>
                      <exclusion>
                          <groupId>org.springframework.boot</groupId>
                          <artifactId>spring-boot-starter-tomcat</artifactId>
                      </exclusion>
                  </exclusions>
              </dependency>
      

      修改啟動類

      public class Application extends SpringBootServletInitializer {
             //  修改啟動類,繼承 SpringBootServletInitializer 并重寫 configure 方法
      	@Override
      	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
      		return application.sources(Application.class);
      	}
      
      	public static void main(String[] args) {
      		SpringApplication.run(Application.class, args);
      	}
      }
      

      設置springboot讀取外部Tomcat數據源

      思路

      其實思路很簡單,主要便是拒絕讓spring加載默認的數據源,采用自己配置的方式從tomcat中獲取數據源,下面是具體的步驟:

      實現

      配置文件指定spring數據源為采用JNDI獲取數據源

      #這里的name很重要,在tomcat里需要指定相同名稱的resource
      spring.datasource.jndi-name=java:comp/env/jdbc/myDs
      spring.datasource.expected-type = javax.sql.DataSource
      spring.datasource.driver-class-name = com.mysql.jdbc.Driver
      

      新建配置,自己配置DataSource

      package com.ai.configs;
      
      import org.apache.ibatis.session.SqlSessionFactory;
      import org.mybatis.spring.SqlSessionFactoryBean;
      import org.mybatis.spring.SqlSessionTemplate;
      import org.springframework.beans.factory.annotation.Qualifier;
      import org.springframework.beans.factory.annotation.Value;
      import org.springframework.boot.context.properties.ConfigurationProperties;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
      import org.springframework.jdbc.datasource.DataSourceTransactionManager;
      import org.springframework.jndi.JndiObjectFactoryBean;
      import org.mybatis.spring.annotation.MapperScan;
      
      import javax.naming.NamingException;
      import javax.sql.DataSource;
      
      @Configuration //注冊到springboot 容器中
      @MapperScan(basePackages = "com.ai.dao",sqlSessionTemplateRef  = "test1SqlSessionTemplate")
      public class DataSource1Config {
      
          //application.properties中的jndi名稱
          @Value("${spring.datasource.jndi-name}")
          private String jndiName;
      
          @Bean(name = "test1DataSource",destroyMethod = "") // destroy method is disabled for Weblogic update app ability
          @ConfigurationProperties(prefix = "spring.datasource.bigdata")
          public DataSource bigdataDs() throws NamingException {
              JndiObjectFactoryBean bean=new JndiObjectFactoryBean();
             bean.setJndiName(jndiName);
              bean.setProxyInterface(DataSource.class);
              bean.setLookupOnStartup(false);
              bean.afterPropertiesSet();
              return (DataSource) bean.getObject();
          }
      
          @Bean(name = "test1SqlSessionFactory")
          public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {
              SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
              bean.setDataSource(dataSource);
              //加載其他文件,如mapper.xml
               bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
              return bean.getObject();
          }
      
          //事務管理
          @Bean(name = "test1TransactionManager")
          public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
              return new DataSourceTransactionManager(dataSource);
          }
      
          @Bean(name = "test1SqlSessionTemplate")
          public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
              return new SqlSessionTemplate(sqlSessionFactory);
          }
      }
      

      tomcat配置

      在tomcat server.xml中添加如下配置

       <GlobalNamingResources>
          <!-- Editable user database that can also be used by
               UserDatabaseRealm to authenticate users
          -->
          <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
        <!-- 這個resource是要添加的內容 -->
        <Resource name="jdbc/myDs" auth="Container"
                    type="javax.sql.DataSource"
                    driverClassName="com.mysql.jdbc.Driver"
                    url="jdbc:mysql://url:3306/db_name?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;failOverReadOnly=false" 
                    username="root"
                    password="password"
                    initialSize="50"
                    maxTotal="50"
                    maxIdle="30"
                    maxWaitMillis="60000"
                    testOnBorrow="true"
                    validationQuery="select 1"
                    />
        </GlobalNamingResources>
      

      到這里就已經完成了該功能

      posted on 2020-07-17 10:41  yonyong  閱讀(3910)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 人妻中文字幕亚洲精品| 日本亚洲欧洲免费无线码| 激情五月天自拍偷拍视频| 动漫AV纯肉无码AV电影网| 久久a级片| 久久精品国产99亚洲精品| 亚洲毛片多多影院| 久久久精品94久久精品| 成人区精品一区二区不卡| 久久99精品国产麻豆婷婷| 国产欧美日韩精品第二区| 亚洲日本乱码熟妇色精品| 久久久天堂国产精品女人| 亚洲av成人一区在线| 久久精品中文字幕少妇| 亚洲VA欧美VA国产综合| 最新国产精品好看的精品| 午夜福利偷拍国语对白| 亚洲国产成人无码网站大全| 精品日韩人妻中文字幕| 欧美熟妇xxxxx欧美老妇不卡| 国产欧美日韩亚洲一区二区三区| 成人午夜在线观看日韩| 国产成人亚洲精品自产在线| 99在线小视频| 亚洲欧美另类激情综合区蜜芽| 国内精品自线在拍| 欧美自拍嘿咻内射在线观看| 吉川爱美一区二区三区视频| 爱情岛亚洲论坛成人网站| 成人做受120秒试看试看视频| AI做受???高潮AAAA视频| 中文字幕国产精品专区| 色综合中文综合网| 国内偷自第一区二区三区| 97夜夜澡人人爽人人模人人喊| 人妻丰满熟妇av无码区不卡| 国产午夜福利视频第三区| 韩国无码AV片午夜福利| 台湾省| 欧美牲交a欧美牲交aⅴ免费真|