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 這個項目只是用來拋磚引玉, 若是能給你們帶來一點想法是最好的, 但願你們多提寶貴意見, 謝謝.