Spring Boot(一)

为什么用Spring Boot,这个和.net 太相似了(配置方面啊),不用配置。

创建方式:

项目结构:

 

Spring Boot目录结构:

 打印日志的测试,内嵌容器。

import org.slf4j.LoggerFactory;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;


public class LogFilter  implements Filter {
    private Logger logger = LoggerFactory.getLogger(LogFilter.class);
    public void init(FilterConfig filterConfig) throws ServletException{

    }
    public void doFilter(ServletRequest request, ServletResponse  response,FilterChain chain)throws IOException, ServletException {
        logger.info("Request--coming");
        chain.doFilter(request, response);
    }
    public void destroy() {

    }
}

  

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;

import java.util.ArrayList;
import java.util.List;

public class FilterBeanConfig {
    /**
     * 1.构造filter
     * 2.配置拦截urlPattern
     * 3.利用FilterRegistrationBean进行包装
     * @return
     */
    @Bean
    public FilterRegistrationBean logFilter(){
        FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new LogFilter());
        List<String> urList=new ArrayList<>();
        urList.add("*");
        filterRegistrationBean.setUrlPatterns(urList);
        return filterRegistrationBean;
    }
}

  将内嵌容器替换成jetty:

替换成

这个替换成上面的

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>

  修改端口:

 

mybatis-config.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="false"/>
         <setting name="mapUnderscoreToCamelCase" value="true"/>
         <setting name="useGeneratedKeys" value="true"/>
         <setting name="defaultExecutorType" value="REUSE"/>
         <!-- 事务超时时间 -->
         <setting name="defaultStatementTimeout" value="600"/>
    </settings>
    
    
    <typeAliases>
       <typeAlias type="com.mooc.house.common.model.User" alias="user" />
    </typeAliases>
    
    <mappers>
       <mapper resource="mapper/user.xml" />
    </mappers>

</configuration>

  这个地方是分层:

配置 :application.properties

spring.druid.driverClassName=com.mysql.jdbc.Driver
spring.druid.url=jdbc:mysql://localhost:3306/user?characterEncoding=UTF-8
spring.druid.username=root
spring.druid.password=sunliyuan123456

#最大连接数
spring.druid.maxActive=30
#最小连接数
spring.druid.minIdle=5
#获取连接的最大等待时间
spring.druid.maxWait=10000
#解决mysql8小时问题
spring.druid.validationQuery=SELECT 'x'
#空闲连接检查时间间隔
spring.druid.timeBetweenEvictionRunsMillis=60000
#空间连接最小空闲时间
spring.druid.minEvictableIdleTimeMillis=3000000

  pom.xml

 <dependency>
	<groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
	<version>15.0</version>
</dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.13</version>
</dependency>

  

import com.alibaba.druid.filter.Filter;
import com.alibaba.druid.filter.stat.StatFilter;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.google.common.collect.Lists;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.servlet.ServletRegistration;

@Configuration
public class DruidConfig {
    @ConfigurationProperties(prefix = "spring.druid")
    @Bean(initMethod = "init",destroyMethod = "close")
    public DruidDataSource dataSource(){
        DruidDataSource dataSource=new DruidDataSource();
        dataSource.setProxyFilters(Lists.newArrayList(startFilter()));
        return dataSource;
    }
    @Bean
    public Filter startFilter(){
        StatFilter filter=new StatFilter();
        filter.setSlowSqlMillis(5000);
        filter.setLogSlowSql(true);
        filter.setMergeSql(true);
        return filter;
    }
    @Bean
    public ServletRegistrationBean servletRegistration(){
        return new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
    }
}

  

 整合freemarke步骤

           <dependency>
		   <groupId>org.springframework.boot</groupId>
		   <artifactId>spring-boot-starter-freemarker</artifactId>
	   </dependency>

  

<dependency>
		<groupId>org.apache.httpcomponents</groupId>
		<artifactId>httpclient</artifactId>
	</dependency>

  

import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.NoConnectionReuseStrategy;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import  org.apache.http.client.HttpClient;

@Configuration
@ConditionalOnClass({HttpClient.class})
@EnableConfigurationProperties(HttpClientProperties.class)
public class HttpClientAutoConfiguration {
    private final HttpClientProperties properties;
    public HttpClientAutoConfiguration(HttpClientProperties properties){
        this.properties=properties;
    }

    //httpclient bean 的定義
    @Bean
    @ConditionalOnMissingBean(HttpClient.class)
    public HttpClient httpClient(){
        //构造requestConfig
        RequestConfig requestConfig=RequestConfig.custom()
                .setConnectTimeout(properties.getConnectTimeOut()).setSocketTimeout(properties.getSocketTimeOut()).build();
        HttpClient client= (HttpClient) HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).setUserAgent(properties.getAgent())
                .setMaxConnPerRoute(properties.getMaxConnPerRoute()).setConnectionReuseStrategy(new NoConnectionReuseStrategy());
        return client;
    }
}

  

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix="spring.httpclient")
public class HttpClientProperties {
    private Integer connectTimeOut=1000;
    private Integer socketTimeOut=10000;

    public Integer getConnectTimeOut() {
        return connectTimeOut;
    }

    public void setConnectTimeOut(Integer connectTimeOut) {
        this.connectTimeOut = connectTimeOut;
    }

    public Integer getSocketTimeOut() {
        return socketTimeOut;
    }

    public void setSocketTimeOut(Integer socketTimeOut) {
        this.socketTimeOut = socketTimeOut;
    }

    public String getAgent() {
        return agent;
    }

    public void setAgent(String agent) {
        this.agent = agent;
    }

    public Integer getMaxConnPerRoute() {
        return maxConnPerRoute;
    }

    public void setMaxConnPerRoute(Integer maxConnPerRoute) {
        this.maxConnPerRoute = maxConnPerRoute;
    }

    public Integer getMaxConnTotaol() {
        return maxConnTotaol;
    }

    public void setMaxConnTotaol(Integer maxConnTotaol) {
        this.maxConnTotaol = maxConnTotaol;
    }

    private  String agent="agent";
    private  Integer maxConnPerRoute=10;
    private  Integer maxConnTotaol=50;
}

  

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class Errorhandler {
	private static final Logger logger = LoggerFactory.getLogger(Errorhandler.class);

	@ExceptionHandler(value={Exception.class,RuntimeException.class})
	public String error500(HttpServletRequest request,Exception e){
		logger.error(e.getMessage(),e);
		logger.error(request.getRequestURL() + " encounter 500");
		return "error/500";
	}
}

  

最后总结一句:不知道java 为什么能在中国这么火,难道就是配置,让中国的程序员这么迷恋他,比起.net,java 最难搞的就是配置,这还是spring Boot ,其他更恶心。说多了,都是泪,(不过其他一些还是挺好的,如线程和数据结构)一下午,就搞了个搭建开发环境。还得继续往下啊。

原文地址:https://www.cnblogs.com/sunliyuan/p/10911592.html