Spring这个巨无霸由于其优良的设计和功能的完备, 已是每一个Java程序员必备的技能. 不过因为Spring的配置繁琐, 相关模块众多, 增长了框架整合的复杂度, spring boot的出现很好的解决了这些问题, 其设计目的是用来简化新的Spring应用的初始搭建以及开发过程.html
spring boot的特色java
spring boot经常使用组件
spring boot对经常使用模块进行了组件化, 整合起来很是容易, 下面是几个经常使用的spring boot组件git
公司内部的各个开发团队由于技术的偏好以及擅长的技术不一样, 在开发项目时都有各自的考虑和选型, 这种状况致使了大部分的项目使用的框架是不一样的, 增长了新人上手项目的难度, 并且各个开发团队在重复的造轮子, 技术的积累比较薄弱.
正确的作法是应该有一套合理高效的统一使用的项目模板, 规范开发流程和技术选型, 将主要的精力放在业务的开发上, 而不是重复造轮子.程序员
补充说明github
...... <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>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> ......
jetty高级配置web
@Configuration public class JettyConfig { @Bean public EmbeddedServletContainerFactory servletContainerFactory( @Value("${jetty.threadPool.maxThreads:256}") final String maxThreads, @Value("${jetty.threadPool.minThreads:8}") final String minThreads, @Value("${jetty.threadPool.idleTimeout:60000}") final String idleTimeout) { JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory = new JettyEmbeddedServletContainerFactory(); jettyEmbeddedServletContainerFactory.addServerCustomizers(new JettyServerCustomizer() { @Override public void customize(Server server) { final QueuedThreadPool threadPool = server.getBean(QueuedThreadPool.class); threadPool.setMaxThreads(Integer.valueOf(maxThreads)); threadPool.setMinThreads(Integer.valueOf(minThreads)); threadPool.setIdleTimeout(Integer.valueOf(idleTimeout)); } }); return jettyEmbeddedServletContainerFactory; } }
...... <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <classifier>exec</classifier> </configuration> </plugin> ......
执行 mvn clean package 会生成两个jar包, xxxx-exec.jar是可执行jar包, xxxx.jar是普通的jar包spring
目前来看, Druid是Java语言中最好的数据库链接池,而且可以提供强大的监控和扩展功能。 在repository模块的pom.xml引入Druid的依赖sql
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.20</version> </dependency>
使用spring-boot的自动配置, 将默认数据库链接池替换为Druid数据库
//MyBatisConfig.java ...... @Bean public DataSource dataSource() { DruidDataSource druidDataSource = new DruidDataSource(); try { druidDataSource.setUrl(jdbcUrl); druidDataSource.setUsername(username); druidDataSource.setPassword(password); druidDataSource.setMaxActive(maxActive); druidDataSource.setFilters("stat"); druidDataSource.setInitialSize(1); druidDataSource.setMaxActive(60000); druidDataSource.setMinIdle(1); druidDataSource.setTimeBetweenEvictionRunsMillis(60000); druidDataSource.setMinEvictableIdleTimeMillis(300000); druidDataSource.setTestWhileIdle(true); druidDataSource.setTestOnBorrow(false); druidDataSource.setTestOnReturn(false); druidDataSource.setValidationQuery("select 'x'"); druidDataSource.setPoolPreparedStatements(true); druidDataSource.setMaxOpenPreparedStatements(20); } catch (SQLException e) { e.printStackTrace(); } return druidDataSource; } ......
配置Druid的监控Controller, 在web模块下找到DruidStatViewController浏览器
@WebServlet(urlPatterns = "/druid/*", initParams={ @WebInitParam(name="allow",value=""),// IP白名单 (没有配置或者为空,则容许全部访问) @WebInitParam(name="deny",value=""),// IP黑名单 (存在共同时,deny优先于allow) @WebInitParam(name="loginUsername",value="atlas"),// 用户名 @WebInitParam(name="loginPassword",value="atlas"),// 密码 @WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能 }) public class DruidStatViewController extends StatViewServlet { }
在浏览器打开http://localhost:9090/boom/druid/index.html
在repository模块下找到config包
//MyBatisConfig.java ...... @Bean(name = "sqlSessionFactory") public SqlSessionFactory sqlSessionFactoryBean() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource()); PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mybatis/*.xml")); return sqlSessionFactoryBean.getObject(); } ......
//MyBatisMapperScannerConfig.java @Configuration @MapperScan("com.boom.base.repository.mapper") @AutoConfigureAfter({ MyBatisConfig.class, MyBatisConfigDevelopment.class }) public class MyBatisMapperScannerConfig { public MapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); mapperScannerConfigurer.setBasePackage("com.boom.base.repository.mapper"); return mapperScannerConfigurer; } }
项目位置: spring-boot-base 这个项目只是用来抛砖引玉, 若是能给你们带来一点想法是最好的, 但愿你们多提宝贵意见, 谢谢.