zoukankan      html  css  js  c++  java
  • springboot+tomcat+jndi访问数据库

      一、主要代码

      pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.leiyuke</groupId>
        <artifactId>databaseDemo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.4.RELEASE</version>
            <relativePath />
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
        </properties>
    
        <dependencies>
            <!-- web -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
            </dependency>
            
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.1.1</version>
            </dependency>
            
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-dbcp2</artifactId>
            </dependency>
    
            <!-- 修改后立即生效 热部署 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>springloaded</artifactId>
                <version>1.2.8.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <configuration>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
            <finalName>databaseDemo</finalName>
        </build>
    </project>
    View Code

      src/main/resources/application.yml

    spring:
      datasource:
        jndi-name: test-jndi
    
    mybatis:
      type-aliases-package: com.leiyuke.database.entity
      config-location=classpath: mybatis/mybatis.cfg.xml
      mapper-locations: classpath:mybatis/mapper/**/*.xml  
      
    logging:
      level:
        root: info
    View Code

      src/main/resources/mybatis/mybatis.cfg.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    <configuration>
    
        <settings>
            <setting name="cacheEnabled" value="true" /><!-- 二级缓存开启 -->
        </settings>
    
    </configuration>
    View Code

      src/main/resources/mybatis/mybatis/UserMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.leiyuke.database.mapper.UserMapper">
        <select id="getAll" resultType="User">
            select id,name,age from t_user;
        </select>
    </mapper>
    View Code

      App.java

    package com.leiyuke.database;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
    import org.springframework.context.annotation.ComponentScan;
    
    @SpringBootApplication
    @ComponentScan(basePackages = "com.leiyuke")
    public class App extends SpringBootServletInitializer{
        
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
        
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(App.class);
        }
    }
    View Code

      DataSourceConfig.java

    package com.leiyuke.database;
    
    import javax.sql.DataSource;
    
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Configurable;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Primary;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup;
    
    @Configurable
    @MapperScan(basePackages= {"com.leiyuke.database.mapper"},sqlSessionFactoryRef="test1SqlSessionTemplate")
    public class DataSourceConfig {
    
        @Bean("ds1")
        @Primary
        public DataSource dataSourceJndi() {
            JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
            DataSource dataSource = dataSourceLookup.getDataSource("test-jndi");
            return dataSource;
        }
        
        @Bean(name = "test1SqlSessionFactory")
        public SqlSessionFactory sqlSessionFactory(@Qualifier("ds1") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
            sessionFactoryBean.setDataSource(dataSource);
            sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/**/*.xml"));
            return sessionFactoryBean.getObject();
        }
        
        @Bean(name = "test1TransactionManager")
        public DataSourceTransactionManager testTransactionManager(@Qualifier("ds1") DataSource dataSource) {
            return new DataSourceTransactionManager((javax.sql.DataSource) dataSource);
        }
        
        @Bean(name = "test1SqlSessionTemplate")
        public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }
    View Code

      UserController.java

    package com.leiyuke.database.controller;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.leiyuke.database.entity.User;
    import com.leiyuke.database.service.UserService;
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
        
        @Autowired
        private UserService userService;
        
        @RequestMapping("/getAll")
        public List<User> getAll(Model model) {
            List<User> list=userService.getAll(); 
            return list;
        }
    }
    View Code

      UserMapper.java

    package com.leiyuke.database.mapper;
    
    import java.util.List;
    
    import org.apache.ibatis.annotations.Mapper;
    
    import com.leiyuke.database.entity.User;
    
    @Mapper
    public interface UserMapper {
        List<User> getAll();
    }
    View Code

      二、主要说明

      1、tomcat使用的是apache-tomcat-9.0.0.M20.zip,解压后删除webapps中的所有目录及文件(必须)

      2、修改配置文件context.xml,添加如下内容:

    <Context>
        <!-- Default set of monitored resources. If one of these changes, the    -->
        <!-- web application will be reloaded.                                   -->
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
        <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
        <!-- Uncomment this to disable session persistence across Tomcat restarts -->
        <!--
        <Manager pathname="" />
        -->
        <Resource
        name="test-jndi"
        auth="Container"
        type="javax.sql.DataSource"
        factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
        driverClassName="com.mysql.cj.jdbc.Driver"
        url="jdbc:mysql://192.168.7.105:3306/sltest?autoReconnect=true&amp;serverTimezone=UTC&amp;characterEncoding=utf-8"
        username="root"
        password="123456"
        maxWaitMillis="100000"
        />
    </Context>

      3、示例中使用的是mysql5.7

      4、示例中依赖是mysql-connector-java-5.1.46.jar,在打包完的项目中需要替换为mysql-connector-java-8.0.18.jar,否则无法启动

      5、如果不想在项目的lib中替换为mysql-connector-java-8.0.18.jar,可以直接将此jar放入tomcat的lib中

  • 相关阅读:
    第二类斯特林数学习笔记
    [ZJOI2017]树状数组
    「LibreOJ Round #6」花火
    [Ynoi2016]这是我自己的发明 莫队
    codeforces706E
    扩展CRT
    PKUSC2018游记
    「PKUWC 2018」Minimax
    「SHOI2015」(LOJ2038)超能粒子炮・改
    Codeforces712E
  • 原文地址:https://www.cnblogs.com/javasl/p/14645902.html
Copyright © 2011-2022 走看看