springboot 快速开发

1 篇文章 0 订阅
1 篇文章 0 订阅

1:简介

	springboot是在spring的基础上构建出来的快速开发框架,算起来不算是一个全新的框架,
官方推出springboot的目的是为了简化配置,快速开发,springboot可以实现传统spring项目
的所有功能.但是配置文件从原来的各种*-spring.xml 缩减为一个application.properties
文件或一个application.yml文件,官方推荐application.yml文件.在2014年4月推出第一个
稳定版本1.0.0.RELEASE

2:版本

	springboot 现在维护两个稳定的分支1.5.x 和2.x,两个分支不兼容.2.X 的配置配置文件和
jar包的路径不些不同,1.5.x基于spring4.x开发,2.x基于spring5开发,而spring5是基于jdk8开发
的,所以使用springboot2 要求jdk8以上版本

3:springboot模块划分

	spring将整个框架划分为不同的模块,mvc,web,context,tx,core,orm等,但是在springboot
中模块更抽象,web开发spring-boot-web-starter,访问数据库的spring-boot-starter-jdbc 
官方为每个要实现的功能都提供了一个starter,可以按需引入其中包含Spring中的
mvc web context core等这就方便了jar包的版本管理 	官网starter路径
https://docs.spring.io/spring-boot/docs/1.5.17.RELEASE/reference/htmlsingle/#using-boot-starter

4:快速开发
使用eclipse或者idea创建maven工程,开发简单的web工程引入spring-boot-starter-web
模块即可.在包路径下创建启动类DubboMvcApplication包路径com.boot.dubbo.mvc
`
@SpringBootApplication
public class DubboMVCApplication {

private static Logger logger = LoggerFactory.getLogger(DubboMVCApplication.class);

public static void main(String[] args) {
    SpringApplication.run(DubboMVCApplication.class, args);
    logger.info("dubbo mvc application start successfully---------");
}

}
`
编写玩controller后使用main方法启动程序即可访问.spring容器默认会扫描启动
类所在包路径下的所有类,注解SpringBootApplication实际是注解ComponentScan
和注解EableConfiguration的组合注解,一个注解可以完成两个注解的功能,这样
组合注解在springboot及springcloud框架中有很多
5:json序列化
springMVC在序列化是常采用json的方式,springboot默认采用的也是这种方式
但是要实现个性化的序列化需要手动配置,配置方式可以使用配置文件或java
编码的方式,配置文件的方式如下:

#使用jackson序列化
spring.http.converters.preferred-json-mapper=jackson
#序列化是对属性为空的属性的处理
spring.jackson.default-property-inclusion=NON_ABSENT
#对date数据的格式化
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
#时区
spring.jackson.time-zone=GMT+8

java编码使用fastjson的方式:

@Bean
	public HttpMessageConverters fastJsonHttpMessageConverters() {
		
		FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
		FastJsonConfig fastJsonConfig = new FastJsonConfig();
		fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
		fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
		fastConverter.setFastJsonConfig(fastJsonConfig);
		HttpMessageConverter<?> converter = fastConverter;
		return new HttpMessageConverters(converter);
	}

6:配置文件的读取
springboot默认会读取resource目录下的application.properties和application.yml
文件,官方推荐yml文件,这种文件符合json的格式,结构化好,如果我们要添加自定义
的属性问价可以在启动类上使用注解的方式添加如下:

@PropertySource(value = "classpath:config.properties", ignoreResourceNotFound = true)

在代码中我们可以使用@value注解获取配置文件的内容,在springboot系统中有一个
内置的Environment对象,里面存储配置文件里配置的所有配置信息,可以在需要使用
配置属性的地方注入这个对象,然后获取属性值

7:与第三方框架整合:
spring框架之所以流行就是因为它可以非常方便的与第三方框架整合,springboot
作为spirng的抽象当然也不会差,以常用的mybatis为例,整合时使用mytais的starter
包mybatis-spring-boot-starter,当然还要有数据库包,连接池的包springboot默认提
供,1.x是Tomcat JDBC Pool,性能不是很好,所以在springboot1.x时一般会自己配置
性能好的druid,引入druid-spring-boot-starter使用配置文件的方式配置连接池如下:

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://192.168.1.212:3306/tykj?useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.password=password
spring.datasource.username=username
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.initialSize=5
spring.datasource.druid.minIdle=5
spring.datasource.druid.maxActive=30

在springboot2中抛弃Tomcat JDBC Pool,采用了目前据说性能最好的HikariCP,配置如下

spring.datasource.url=jdbc:mysql://192.168.1.212:3306/tykj?useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.password=password
spring.datasource.username=username
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

mybatis配置

#数据库实体包路径
spring.mybatis.typeAliasesPackage= com.xdd.entity
#mapper.xml文件路劲
spring.mybatis.mapperLocations=classpath:mapper/*.xml

启动类上添加注解注册mapper类@MapperScan(basePackages)这样配置完成就可以
像spring那样开发mybatis程序

8:springboot 自动配置的原理
springboot能快速搭建是建立在自动配置的基础上的,在引入的starter的java包时会
引入一个autoconfigure包,在这个包的META-INF目录下有个spring.factories文件里面记录
的是需要自动配置的类,应用再启动是会读取所有的spring.factories文件,然后根据classpath
路径下的class,配置文件这些条件决定配置哪些类.在这些配置类中常见的注解
ConditionalOnClass存在某一个class ConditionalOnBean 存在bean等等这类注解作为自动
配置的条件 可参考下面的博客:https://blog.csdn.net/doctor_who2004/article/details/79184230

9:常用注解
springboot开始除了上面提到的条件注解外还有一些常用的注解@bean 对应xml的bean标签,
Profile 根据不同环境决定是否实例化bean Primary 当环境中已存在相同类型的bean时以当前bean
为准 Configuration 标记一个类为java配置类 Component 和 Configuration 注解的区别可以参考博客
https://blog.csdn.net/long476964/article/details/80626930 一个常见的配置类如下:

@Configuration
public class ApplicationConfig {

/**
 * 分页拦截器
 *在dev环境下转配次bean 如果spring环境中存在PaginationInterceptor 用这个实例覆盖已存在的
 * @return
 */
@Bean
@Primary
@Profile("dev")
public PaginationInterceptor paginationInterceptor() {
    return new PaginationInterceptor();
}

}
10 : filter 拦截器注册
filter的注册方式有两种 1:注解的方式(selevt3.0以后支持) 2: bean的方式,例如有个权限PermissionFilter
注解方式@WebFilter(filterName = “loginFilter”, urlPatterns = “/*”) 这种方式需要用注解ServletComponentScan 开启扫描 第二种方式如下

在这里插入代码片@Bean
    public FilterRegistrationBean<PermissionFilter> permissionFilter() {

        FilterRegistrationBean<PermissionFilter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new PermissionFilter());
        registration.addUrlPatterns("/*");//设置过滤路径,/*所有路径
        registration.addInitParameter("name", "value");//添加默认参数
        registration.setName("permissionFilter");
        registration.setOrder(2);//设置优先级
        return registration;
    }

注册拦截器需要一个配置类实现WebMvcConfigurer接口,在接口中重写addInterceptors方法,使用
registry.addInterceptor(new LogInterceptor());的方式注册拦截器,在这个接口中还可以实现系统的
默认也配置 跨域配置 配置如下:

 /**
     * 添加默认首页
     *
     * @param registry
     */
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("redirect:/template/index");
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
    }

    /**
     * 跨域
     *
     * @param registry
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST","PUT","DELETE")
                .allowCredentials(true).maxAge(3600);
    }

11:系统启动后执行某个任务
有时系统启动后需要加载缓存等操作,springboot提供了CommandLineRunner 和ApplicationRunner
两个接口

@Component
public class StartUpRunner implements CommandLineRunner {
    private Logger logger = LoggerFactory.getLogger(StartUpRunner.class);
    @Override
    public void run(String... args) {
        logger.info("springboot启动后执行此方法");
    }
}

文章中代码可以参考git上https://github.com/lukw510903926/springboot-dubbo.git中mvc 模块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值