spring+druid+mybatis samples
This commit is contained in:
		@@ -0,0 +1,18 @@
 | 
			
		||||
package com.heibaiying.bean;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author : heibaiying
 | 
			
		||||
 * @description :
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@Data
 | 
			
		||||
public class Flow {
 | 
			
		||||
 | 
			
		||||
    private long id;
 | 
			
		||||
 | 
			
		||||
    private long flowId;
 | 
			
		||||
 | 
			
		||||
    private long plugId;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,16 @@
 | 
			
		||||
package com.heibaiying.bean;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author : heibaiying
 | 
			
		||||
 * @description :
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class Relation {
 | 
			
		||||
 | 
			
		||||
    private String id;
 | 
			
		||||
 | 
			
		||||
    private String name;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,31 @@
 | 
			
		||||
package com.heibaiying.config;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Value;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
import org.springframework.context.annotation.PropertySource;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author : heibaiying
 | 
			
		||||
 * @description :
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@Configuration
 | 
			
		||||
@PropertySource(value = "classpath:mysql.properties")
 | 
			
		||||
@Data
 | 
			
		||||
public class DataSourceConfig {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 感觉这种注入的方式并不够好
 | 
			
		||||
     * 没有spring-boot中使用@ConfigurationProperties(prefix = "config")指定前缀注入的方式优雅
 | 
			
		||||
     */
 | 
			
		||||
    @Value("${mysql.driverClassName}")
 | 
			
		||||
    private String driverClassName;
 | 
			
		||||
    @Value("${mysql.url}")
 | 
			
		||||
    private String url;
 | 
			
		||||
    @Value("${mysql.username}")
 | 
			
		||||
    private String username;
 | 
			
		||||
    @Value("${mysql.password}")
 | 
			
		||||
    private String password;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,23 @@
 | 
			
		||||
package com.heibaiying.config;
 | 
			
		||||
 | 
			
		||||
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author : heibaiying
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
 | 
			
		||||
 | 
			
		||||
    protected Class<?>[] getRootConfigClasses() {
 | 
			
		||||
        return new Class[0];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected Class<?>[] getServletConfigClasses() {
 | 
			
		||||
        return new Class[]{ServletConfig.class};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected String[] getServletMappings() {
 | 
			
		||||
        return new String[]{"/"};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,119 @@
 | 
			
		||||
package com.heibaiying.config;
 | 
			
		||||
 | 
			
		||||
import com.alibaba.druid.pool.DruidDataSource;
 | 
			
		||||
import org.mybatis.spring.SqlSessionFactoryBean;
 | 
			
		||||
import org.mybatis.spring.mapper.MapperScannerConfigurer;
 | 
			
		||||
import org.springframework.context.annotation.Bean;
 | 
			
		||||
import org.springframework.context.annotation.ComponentScan;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
 | 
			
		||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 | 
			
		||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
 | 
			
		||||
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
 | 
			
		||||
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
 | 
			
		||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.sql.SQLException;
 | 
			
		||||
 | 
			
		||||
;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author : heibaiying
 | 
			
		||||
 */
 | 
			
		||||
@Configuration
 | 
			
		||||
@EnableTransactionManagement // 开启声明式事务处理 等价于xml中<tx:annotation-driven/>
 | 
			
		||||
@EnableWebMvc
 | 
			
		||||
@ComponentScan(basePackages = {"com.heibaiying.*"})
 | 
			
		||||
public class ServletConfig implements WebMvcConfigurer {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 配置静态资源处理器
 | 
			
		||||
     */
 | 
			
		||||
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
 | 
			
		||||
        configurer.enable();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 配置druid 数据源
 | 
			
		||||
     */
 | 
			
		||||
    @Bean
 | 
			
		||||
    public DruidDataSource dataSource(DataSourceConfig sourceConfig) throws SQLException {
 | 
			
		||||
        DruidDataSource dataSource = new DruidDataSource();
 | 
			
		||||
        dataSource.setUrl(sourceConfig.getUrl());
 | 
			
		||||
        dataSource.setUsername(sourceConfig.getUsername());
 | 
			
		||||
        dataSource.setPassword(sourceConfig.getPassword());
 | 
			
		||||
 | 
			
		||||
        // 配置获取连接等待超时的时间
 | 
			
		||||
        dataSource.setMaxWait(60000);
 | 
			
		||||
 | 
			
		||||
        // 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
 | 
			
		||||
        dataSource.setTimeBetweenEvictionRunsMillis(2000);
 | 
			
		||||
 | 
			
		||||
        // 配置一个连接在池中最小生存的时间,单位是毫秒
 | 
			
		||||
        dataSource.setMinEvictableIdleTimeMillis(600000);
 | 
			
		||||
        dataSource.setMaxEvictableIdleTimeMillis(900000);
 | 
			
		||||
 | 
			
		||||
        /* validationQuery 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。
 | 
			
		||||
         * 但是在 oracle 数据库下需要写成 select 'x' from dual 不然实例化数据源的时候就会失败,
 | 
			
		||||
         * 这是由于oracle 和 mysql 语法间的差异造成的
 | 
			
		||||
         */
 | 
			
		||||
        dataSource.setValidationQuery("select 'x'");
 | 
			
		||||
 | 
			
		||||
        // 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
 | 
			
		||||
        dataSource.setTestWhileIdle(true);
 | 
			
		||||
        // 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
 | 
			
		||||
        dataSource.setTestOnBorrow(false);
 | 
			
		||||
        // 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
 | 
			
		||||
        dataSource.setTestOnReturn(false);
 | 
			
		||||
 | 
			
		||||
        // 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。
 | 
			
		||||
        dataSource.setPhyMaxUseCount(100000);
 | 
			
		||||
 | 
			
		||||
        /*配置监控统计拦截的filters Druid连接池的监控信息主要是通过StatFilter 采集的,
 | 
			
		||||
         采集的信息非常全面,包括SQL执行、并发、慢查、执行时间区间分布等*/
 | 
			
		||||
        dataSource.setFilters("stat");
 | 
			
		||||
 | 
			
		||||
        return dataSource;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 配置mybatis 会话工厂
 | 
			
		||||
     *
 | 
			
		||||
     * @param dataSource 这个参数的名称需要保持和上面方法名一致 才能自动注入,因为
 | 
			
		||||
     *                   采用@Bean注解生成的bean 默认采用方法名为名称,当然也可以在使用@Bean时指定name属性
 | 
			
		||||
     */
 | 
			
		||||
    @Bean
 | 
			
		||||
    public SqlSessionFactoryBean sessionFactoryBean(DruidDataSource dataSource) throws IOException {
 | 
			
		||||
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
 | 
			
		||||
        sessionFactoryBean.setDataSource(dataSource);
 | 
			
		||||
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
 | 
			
		||||
        sessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:/mappers/**/*.xml"));
 | 
			
		||||
        sessionFactoryBean.setConfigLocation(resolver.getResource("classpath:mybatisConfig.xml"));
 | 
			
		||||
        return sessionFactoryBean;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 配置mybatis 会话工厂
 | 
			
		||||
     */
 | 
			
		||||
    @Bean
 | 
			
		||||
    public MapperScannerConfigurer MapperScannerConfigurer() {
 | 
			
		||||
        MapperScannerConfigurer configurer = new MapperScannerConfigurer();
 | 
			
		||||
        configurer.setSqlSessionFactoryBeanName("sessionFactoryBean");
 | 
			
		||||
        configurer.setBasePackage("com.heibaiying.dao");
 | 
			
		||||
        return configurer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 定义事务管理器
 | 
			
		||||
     */
 | 
			
		||||
    @Bean
 | 
			
		||||
    public DataSourceTransactionManager transactionManager(DruidDataSource dataSource) {
 | 
			
		||||
        DataSourceTransactionManager manager = new DataSourceTransactionManager();
 | 
			
		||||
        manager.setDataSource(dataSource);
 | 
			
		||||
        return manager;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,19 @@
 | 
			
		||||
package com.heibaiying.config.druid;
 | 
			
		||||
 | 
			
		||||
import com.alibaba.druid.support.http.WebStatFilter;
 | 
			
		||||
 | 
			
		||||
import javax.servlet.annotation.WebFilter;
 | 
			
		||||
import javax.servlet.annotation.WebInitParam;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author : heibaiying
 | 
			
		||||
 * @description : WebStatFilter用于采集web-jdbc关联监控的数据
 | 
			
		||||
 */
 | 
			
		||||
@WebFilter(filterName="druidWebStatFilter",urlPatterns="/*",
 | 
			
		||||
        initParams={
 | 
			
		||||
                @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略资源
 | 
			
		||||
        }
 | 
			
		||||
)
 | 
			
		||||
public class DruidStatFilter extends WebStatFilter {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,19 @@
 | 
			
		||||
package com.heibaiying.config.druid;
 | 
			
		||||
 | 
			
		||||
import com.alibaba.druid.support.http.StatViewServlet;
 | 
			
		||||
 | 
			
		||||
import javax.servlet.annotation.WebInitParam;
 | 
			
		||||
import javax.servlet.annotation.WebServlet;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author : heibaiying
 | 
			
		||||
 * @description : 配置监控页面用户名密码
 | 
			
		||||
 */
 | 
			
		||||
@WebServlet(urlPatterns = "/druid/*",
 | 
			
		||||
        initParams={
 | 
			
		||||
                @WebInitParam(name="resetEnable",value="true"),
 | 
			
		||||
                @WebInitParam(name="loginUsername",value="druid"),
 | 
			
		||||
                @WebInitParam(name="loginPassword",value="druid")
 | 
			
		||||
        })
 | 
			
		||||
public class DruidStatViewServlet extends StatViewServlet {
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,24 @@
 | 
			
		||||
package com.heibaiying.controller;
 | 
			
		||||
 | 
			
		||||
import com.heibaiying.dao.MysqlDao;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PathVariable;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author : heibaiying
 | 
			
		||||
 * @description :
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@RestController
 | 
			
		||||
public class MysqlController {
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private MysqlDao mysqlDao;
 | 
			
		||||
 | 
			
		||||
    @GetMapping("relation/{id}")
 | 
			
		||||
    public String get(@PathVariable(name = "id") String id) {
 | 
			
		||||
        return mysqlDao.queryById(id).get(0).toString();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,24 @@
 | 
			
		||||
package com.heibaiying.controller;
 | 
			
		||||
 | 
			
		||||
import com.heibaiying.dao.OracleDao;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PathVariable;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author : heibaiying
 | 
			
		||||
 * @description :
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@RestController
 | 
			
		||||
public class OracleController {
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private OracleDao oracleDao;
 | 
			
		||||
 | 
			
		||||
    @GetMapping("flow/{id}")
 | 
			
		||||
    public String get(@PathVariable(name = "id") Long id) {
 | 
			
		||||
        return oracleDao.queryById(id).get(0).toString();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,17 @@
 | 
			
		||||
package com.heibaiying.dao;
 | 
			
		||||
 | 
			
		||||
import com.heibaiying.bean.Relation;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author : heibaiying
 | 
			
		||||
 * @description :
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@Mapper
 | 
			
		||||
public interface MysqlDao {
 | 
			
		||||
 | 
			
		||||
    List<Relation> queryById(String id);
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,16 @@
 | 
			
		||||
package com.heibaiying.dao;
 | 
			
		||||
 | 
			
		||||
import com.heibaiying.bean.Flow;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author : heibaiying
 | 
			
		||||
 * @description :
 | 
			
		||||
 */
 | 
			
		||||
@Mapper
 | 
			
		||||
public interface OracleDao {
 | 
			
		||||
 | 
			
		||||
    List<Flow> queryById(long id);
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user