springBoot(1)【笔记整理】

1.springBoot特性

Spring Boot将很多魔法带入了Spring应用程序的开发之中,其中最重要的是以下四个核心。

  自动配置:针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置。
  起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。
  命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,
无需传统项目构建。

  Actuator:让你能够深入运行中的Spring Boot应用程序,一探究竟。

 

2. springBoot的项目构建

1. 新建一个maven项目

2. 配置pom文件

springboot的pom文件,首先要配置parent

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.3.RELEASE</version>
	</parent>


然后添加依赖

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

3. 配置application.properties

server.port=8080

4. 编写启动类

@SpringBootApplication
@MapperScan("com.wzz.sb")
public class Main {

	public static void main(String[] args) {
		ConfigurableApplicationContext context = SpringApplication.run(Main.class, args);
	}

}

注意:启动类要放在项目包的最外层,因为他会自动扫描他之下的所有包和类

3. 一部分说明

1. springBoot启动方式

Spring Boot可以把Web应用程序变为可自执行的JAR文件,不用部署到传统Java应用服务器里就能在命令行里运行。

Spring Boot在应用程序里嵌入了一个Servlet容器(Tomcat、Jetty或Undertow),以此实现这一功能。

此种方式可以在配置文件中配置tomcat的端口。

2. application.properties配置文件的说明

springBoot支持两种配置文件,一种是properties配置,一中yml配置,具体百度。

配置端口号例如:

server.port=8888

2. @SpringBootApplication注解的说明

实际上, @SpringBootApplication 将三个有用的注解组合在了一起。
Spring的 @Configuration :标明该类使用Spring基于Java的配置。虽然本书不会写太多配置,但我们会更倾向于使用基于Java而不是XML的配置。
Spring的 @ComponentScan :启用组件扫描,这样你写的Web控制器类和其他组件才能被自动发现并注册为Spring应用程序上下文里的Bean。本章稍后会写一个简单Spring MVC控制器,使用 @Controller 进行注解,这样组件扫描才能找到它。
Spring Boot 的 @EnableAutoConfiguration: 这 个 不 起 眼 的 小 注 解 也 可 以 称 为@Abracadabra,就是这一行配置开启了Spring Boot自动配置的魔力,让你不用再写成篇的配置了。

 

4. 配置方式

1. 配置参数

Spring Boot应用程序有多种设置途径。Spring Boot能从多种属性源获得属性,包括如下几处。
(1) 命令行参数
(2)  java:comp/env 里的JNDI属性
(3) JVM系统属性
(4) 操作系统环境变量
50 第 3章 自定义配置
(5) 随机生成的带 random.* 前缀的属性(在设置其他属性时,可以引用它们,比如 ${random.long} )
(6) 应用程序以外的application.properties或者appliaction.yml文件
(7) 打包在应用程序内的application.properties或者appliaction.yml文件
(8) 通过 @PropertySource 标注的属性源
(9) 默认属性
这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性。

 

2. 使用Bean配置

在配置文件中配置如:

com.bean.name = xiaoming
com.bean.age = 18

然后编写类

@Component
@ConfigurationProperties(prefix = "com.bean")
public class MyBean {
	private String name;
	private String age;
		
	public MyBean() {
		
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}
	
	
}

3. 使用profile

1. properties文件

如果你正在使用application.properties,可以创建额外的属性文件,遵循application-{profile}.properties这种命名格式,这样就能提供特定于Profile的属性了

与此同时,那些并不特定于哪个Profile或者保持默认值(以防万一有哪个特定于Profile的配置不指定这个值)的属性,可以继续放在application.properties里

2. yml文件

如果使用YAML来配置属性,则可以遵循与配置文件相同的命名规范,即创建application-{profile}.yml这样的YAML文件,并将与Profile无关的属性继续放在application.yml里

还可以如下所示

logging:
level:
root: INFO
---
spring:
profiles: development
logging:
level:
root: DEBUG
---
spring:
profiles: production
logging:
path: /tmp/
file: BookWorm.log
level:
root: WARN

这个application.yml文件分为三个部分,使用一组三个连字符( --- )作为分隔符。第二段和第三段分别为 spring.profiles 指定了一个值,这个值表示该部分配置应该应用在哪
个 Profile 里

 

3. 激活

$ java -jar readinglist-0.0.1-SNAPSHOT.jar --spring.profiles.active=production

或者在application.properties中设置spring.profiles.active=peer2

或者在yml中,

spring:
profiles:
active: production

 

4. web应用

需要引入依赖

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

然后写controller即可

 

5. 过滤器

1. 基本使用

只要类实现Filter接口,然后变成spring的bean即可,比如加上注解@Component("myFilter")

2. 多个filter设置顺序

如下所示:

@Configuration
public class FilterConfig {
	@Bean
    public FilterRegistrationBean someFilterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new MyFilter());
        registration.addUrlPatterns("/*");
        registration.addInitParameter("paramName", "paramValue");
        registration.setName("sessionFilter");
        registration.setOrder(1);
        return registration;
    }
	
	@Bean
    public FilterRegistrationBean someFilterRegistration2() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new MyFilter2());
        registration.addUrlPatterns("/*");
        registration.addInitParameter("paramName", "paramValue");
        registration.setName("sessionFilter2");
        registration.setOrder(0);
        return registration;
    }
}

可以设置Order字段,来控制顺序,order越小,越先执行。但是注意,filter会在项目启动时候初始化,初始化顺序和这个字段无关

 

3. 其他方式

@WebFilter方式,待研究

 

 

6. 拦截器,静态资源,页面跳转

新建配置类,继承WebMvcConfigurerAdapter,并且加上@Configuration注解

1. 拦截器

新建拦截器类,实现HandlerInterceptor接口,然后重新WebMvcConfigurerAdapter的addInterceptors方法,例如

@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
		super.addInterceptors(registry);
	}

具体执行顺序,按照添加顺序

2. 静态资源

重新WebMvcConfigurerAdapter的addResourceHandlers的方法,如

@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/static").addResourceLocations("classpath:/static");
		super.addResourceHandlers(registry);
	}

如果静态资源放在webapp下,那么addResourceLocations("/static/"),注意路径,不能写classpath

3. 页面跳转

addViewControllersaddViewControllers的方法,如

@Override
	public void addViewControllers(ViewControllerRegistry registry) {
		registry.addViewController("").setViewName("");
		super.addViewControllers(registry);
	}


其他此类的方法,可以自己再看看
 

7. 整合mybatis

1. 数据源配置

spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/sb?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = ******

 

2. mybatis配置

mybatis.mapper-locations=classpath:sql/*.xml

 

需要在启动类上面,加上mybatis的扫描路径@MapperScan("com.wzz.sb"),配置dao的路径

 

8. 集成测试

@RunWith(SpringJUnit4ClassRunner.class)// SpringJUnit支持,由此引入Spring-Test框架支持!
@SpringBootTest(classes = Main.class)// 指定我们SpringBoot工程的Application启动类
public class Tests {

	@Autowired
	UserDao userDao;
	
	@Test
	public void test() {
		userDao.queryAll();
	}
}

 

9. 打包部署

1. 打war包

新建类

public class ReadingListServletInitializer extends SpringBootServletInitializer {

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		// TODO Auto-generated method stub
		return builder.sources(Main.class);
	}
	
}

10. 跨域配置

@Configuration
public class CorsConfig {

	
	@Bean
    public CorsFilter corsFilter() {
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        final CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true); // 允许cookies跨域
        config.addAllowedOrigin("*");// 允许向该服务器提交请求的URI,*表示全部允许。。这里尽量限制来源域,比如http://xxxx:8080 ,以降低安全风险。。
        config.addAllowedHeader("*");// 允许访问的头信息,*表示全部
        config.setMaxAge(18000L);// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了
        config.addAllowedMethod("*");// 允许提交请求的方法,*表示全部允许,也可以单独设置GET、PUT等
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
	
}

11. 返回json格式转换配置

@Configuration
public class DateConverConfig {
	
	
	/**
	 * 将时间戳转为为时间格式
	 * @return
	 */
	@Bean
	public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() {
		MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
	    ObjectMapper mapper = new ObjectMapper();
	    
	    //日期格式转换
	    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
	    mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
	    
	    //Long类型转String类型
	    SimpleModule simpleModule = new SimpleModule();
	    simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
	    simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
	    mapper.registerModule(simpleModule);
	    
	    converter.setObjectMapper(mapper);
	    return converter;
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值