springboot环境配置+使用

@SpringBootApplication内部分为三个注解

  • @EnableAutoConfiguration启用Spring Boot的自动配置机制
  • @ComponentScan:对应用程序所在的软件包启用@Component扫描
  • @Configuration:允许在上下文中注册额外的beans或导入其他配置类
  • @Bean向容器中添加实体bean,可以通过@Conditional来添加条件是否添加此bean
  • @Autowired(required = false)注入bean对象,如果没有就会报错,可以添加required=false来设置可以为空


Starters类路径依赖项

Spring Boot提供了一些“Starters”,可让您将jar添加到类路径中。我们的示例应用程序已经在POM的parent部分使用了spring-boot-starter-parent。spring-boot-starter-parent是一个特殊的启动器,提供有用的Maven默认值。它还提供了一个 dependency-management 部分,以便您可以省略version标签中的“祝福”依赖项。


springboot启动方式

 //方式一
    public static void main(String[] args) {
    //这个方法里面首先要创建一个SpringApplication对象实例,然后调用这个创建好的SpringApplication的实例方法
        SpringApplication.run(Application.class, args);
    }
    //方式二
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MySpringConfiguration.class);
        app.run(args);
    }
    //方式三
    public static void main(String[] args) {
        new SpringApplicationBuilder()
            .sources(Parent.class)
            .child(Application.class)
            .run(args);
    }

SpringApplicationBuilder:链式调用,常见的用例是设置活动配置文件和默认属性以设置应用程序的环境:


外部资源配置

  • 启动程序上面添加
//添加注解
@PropertySource(value= "classpath:properties/config.properties",encoding = "UTF-8",ignoreResourceNotFound = true)

//获取属性
@Component
public class MyBean {

    @Value("${name}")
    private String name;

    // ...

}



多个环境配置yml文件

//pom文件配置

        
            
            dev
            
                dev
            
            
                true
            
        
        
            
            test
            
                test
            
        
        
            
            pro
            
                pro
            
        
      
//环境文件夹要设置为resources类型

加载Yaml文件

  • YamlPropertiesFactoryBean将YML加载为properties
  • YamlMapFactoryBean将Yml加载为Map
  • spring.profiles.active添加加载的配置,可以通过这个设置不同环境加载不同的配置
application-dev.yml
application-pro.yml
srping.profiles.active=dev;
  • YAML列表表示为具有[index]解除引用的属性键
my:
servers:
    - dev.example.com
    - another.example.com
//转换为
my.servers[0]=dev.example.com
my.servers[1]=another.example.com
  • 绑定前面yml中的属性,也可用@Value绑定其中的属性
@ConfigurationProperties(prefix="my")
public class Config {

    private List servers = new ArrayList();

    public List getServers() {
        return this.servers;
    }
}
  • 在单一文件中,可用连续三个连字号(---)区分多个文件另外,还有选择的连续三个点号(...)用来表示文件结尾.
    ==Ymal缺点:无法使用@PropertySource注释加载YAML文件。因此,如果您需要以这种方式加载值,则需要使用属性文件。==

@ConfigurationProperties与@Value:@Value不支持宽松绑定, @ConfigurationProperties支持多属性pojo绑定


整合logback

添加logback.xml

 
    

==只需要改动文件地址,不用导依赖,改配置==


JSON

spring Boot提供三个JSON映射库集成

  • Gson:可以快速的将一个 Json 字符转成一个Java对象,或者将一个 Java 对象转化为Json字符串
//默认不对空属性序列化
private static Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
 /** 对属性值为 null 的字段进行序列化*/
String personStrFinal = new GsonBuilder().serializeNulls().create().toJson(person);
  • Jackson
  • JSON-B
    ==对比:jackson效率更快,Gson功能更多可以做更多的操作,一般使用Gson==


HttpMessageConverter

  • 是用来处理request和response里的数据的。Spring内置了很多
  • AbstractHttpMessageConverter:可以针对某个类进行操作
    ==要求:
    第一个是pom文件中加入jackson的jar包,第二个是在配置文件中加入MappingJackson2HttpMessageConverter==

全局异常处理

@RestControllerAdvice
/*@ControllerAdvice(annotations = {PCInfoController .class}) 配置你需要拦截的控制器,
@ControllerAdvice(basePackages = "com.demo") 配置你需要路径下的控制器*/
public class UserCheckExection {
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public Object checkExectionHandler(HttpServletRequest request, MethodArgumentNotValidException exception) {
       List list = new ArrayList();
        FieldError error = (exception.getBindingResult().getFieldErrors()).get(0);
        HashMap map = new HashMap<>();
        map.put("msg",error.getDefaultMessage());
        map.put("code","12306");
        return map;
    }
}




嵌入式Servlet容器

  • tomcat(springboot-web-starter中已经嵌入tomcat)
  • Jetty(使用需要exclusion中排除tomcat)
  • Undertow



访问静态资源并不需要经过控制器

@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    //第一个参数是在访问url中加的路径,第二个参数是资源在目录中的真实路径
       registry.addResourceHandler("/**").addResourceLocations("classpath:/static1/")
       .addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");
    }
}

==第二个参数格式"classpath:/html/"(代表resources下html目录)也可写成file:/html/这种是媒体资源,链式调用可以写多个资源地址==
springboot默认的拦截器写好了静态资源访问方式,因此在yml里面配置不管用,需要通过WebMvcConfigurer覆盖他的拦截器



配置访问后缀符

//打开后缀匹配开关
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.setUseRegisteredSuffixPatternMatch(true);
    }
//将后缀符匹配到url方法上
    @Bean
    public ServletRegistrationBean servletRegistrationBean(DispatcherServlet dispatcherServlet) {
        ServletRegistrationBean servletServletRegistrationBean = new ServletRegistrationBean<>(dispatcherServlet);
        servletServletRegistrationBean.addUrlMappings("*.do");
        servletServletRegistrationBean.addUrlMappings("*.html");
        servletServletRegistrationBean.addUrlMappings("*.png");
        servletServletRegistrationBean.addUrlMappings("*.jpg");
        return servletServletRegistrationBean;
    }



配置拦截器、过滤器、监听器

参考配置地址

erueka服务关不掉,删除依赖,注释配置和注解都无效

==删除maven仓库里面的包==


项目启动后自动运行的两个类

  • CommandLineRunner
  • ApplicationRunner
  • ==区别:CommandLineRunner将启动函数传入的参数不封装传入run方法,ApplicationRunner封装了参数在ApplicationArguments类中==
  • 共同点:可以重复创建,需要用线程执行内容,因为他们会影响主线程运行
  • 通过@Order(2)来标准顺序
  • 参数类型String... 可填可不填,数组类型


Apache Solr搜索引擎

Elasticsearch搜索引擎



RabbitMQ是一个基于AMQP协议的轻量级,可靠,可扩展且可移植的消息代理

  • YML配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=secret



REST(包括get、post、delete等请求方式请求)

  • spring内置(REST相较于httpclient代码更简洁,效率待验证)
//配置中加入restTemplate
@Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
//
public Object weather(@ApiParam(value = "语言") @RequestParam(value = "language") String language, @ApiParam(value = "地址") @RequestParam(value = "location") String location) throws URISyntaxException, IOException {
        URI uri = new URIBuilder()
                .setScheme("https").setHost("api.seniverse.com").setPath("/v3/weather/now.json")
                .setParameter("key", "w99tf57ghc86thhv")
                .setParameter("language", language)
                .setParameter("location", location)
                .build();
        return restTemplate.getForObject(uri, Object.class);



JavaMailSender

  • SimpleMailMessage(实例)
  • MimeMailMessage(实例)


JAVA 事务

  • JDBC事务(普通事务)
    1. 数据库事务中的本地事务,通过connection对象控制管理,只支持一个库不能多个库
  • JTA事务
    1. JTA事务比JDBC更强大,支持分布式事务(当然也支持本地事务)包含jdbc、jms等java组件事务回滚
  • 容器管理事务:常见hibnate、spring等容器
  • 编程式事务:通过代码对事务进行控制,粒度更小
  • 声明式事务:xml或注解方式实现,实现建立在aop上,在方法开始前创建一个事务,在执行完目标方法之后检查事务情况再进行提交或回滚
//value可不写
@Transactional(value = "rabbitTxManage", rollbackFor = Exception.class)



Quartz Scheduler

  • JobDetail:定义一个特定的工作。可以使用JobBuilderAPI构建JobDetail个实例
  • Calendar
  • Trigger:定义何时触发特定作业。
  • QuartzJobBean作业类


测试spring-boot-starter-test

  • JUnit:单元测试Java应用程序的事实标准。
  • Spring测试和Spring Boot测试:Spring Boot应用程序的实用程序和集成测试支持。
  • AssertJ:一个流畅的断言库。
  • Hamcrest:匹配器对象库(也称为约束或谓词)。
  • Mockito:一个Java 模拟框架。
  • JSONassert:JSON的断言库。
  • JsonPath:JSON的XPath。
  • ==springboot项目单元测试默认会扫描所有类启动程序,只需添加类就可以不启动程序==

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = DemoApplicationTests.class)


你可能感兴趣的:(springboot环境配置+使用)