springboot配置

何許人也123發表於2021-02-02

springboot基本已整合所有,此處只是對預設配置的修改以及配置一些環境

1.配置Mybatis

  首先引入場景mybatis啟動器以及mysql依賴等:資料庫連線池預設使用的是hikari連線池,無需做其他配置,即可使用。當然如果想要更換為德魯伊,只需更改type就可以了,前提是引入Druid的啟動器

<dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid-spring-boot-starter</artifactId>
      <version>1.1.22</version>
    </dependency>

mybatis:
  //掃描對映檔案.xml檔案,具體看你的對映檔案位置,可以指定別名包。
mapper-locations: classpath:com.javasm.*.mapper/*.xml
type-aliases-package: com.javasm
spring:
datasource:
  //springboot預設用的驅動是8.0.22(2.4.2版本)時區必須加上GMT+8
url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource//預設是hikari連線池(可以不用指定type),此處修改為德魯伊(指定type為druid),還有一些其他配置可以酌情配置initial-size、max-active等

  注意:在啟動類上不要忘記配置介面掃描註解,@MapperScan("介面所在位置")

2.靜態資源配置

  靜態資源包括css、js、圖片、以及html等。預設客戶端是不能進行直接訪問,相當於以前的webapps目錄下的WEB-INF目錄下的檔案,只能通過前端控制器進行訪問,springboot內部預設載入4個靜態資源目錄:["/META-INF/resources","/resources/","/static/","/public/"],這4個目錄誰的優先順序從高到低。

3.springboot跨域設定

  新建一個配置類,標明其是一個配置類,並配置corsFilter元件進容器

@Configuration
public class MyCommonConfig {

    @Bean//跨域配置
    public FilterRegistrationBean<Filter> corsFilter(){
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("http://localhost:8888");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**",config);
        FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>(new org.springframework.web.filter.CorsFilter(source));
        bean.setOrder(0);
        return bean;
    }
}

 

4.配置攔截器

新建一個類 implements WebMvcConfigurer

@Component
public class MyWebMvcConfig implements WebMvcConfigurer {

    @Resource  //首先自定義一個攔截器,然後將其將其放入容器@Component,然後在此處裝配。
    LoginInterceptor loginInterceptor;

    @Override  //alt+insert複寫此方法,配置需要攔截的資源,以及需要放行的資源
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/login","/css/**")
; } }

 

5.日誌整合

  springboot預設使用logback日誌元件,可以自己進行修改日誌元件,此處修改為log4j2日誌元件,引入啟動器

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

將log4j2的配置檔案log4j2.xml直接放在resources目錄下即可

 

6.事務支援以及分頁外掛

  在啟動類上開啟事務支援,@EnableTransactionManagement,然後在service層配置@Transactional註解使用。

@SpringBootApplication(scanBasePackages = "com.javasm")//包掃描,與SSM中的ComponentScan作用相同,預設是掃描啟動類所在的包以及其所在包下的所有子包,此處手動配置為com.javasm
@MapperScan("com.javasm.*.mapper")//掃描dao層介面,動態代理此介面並放入容器中,
@EnableTransactionManagement//開啟事務支援
public class Boot01Application {

    public static void main(String[] args) {
        SpringApplication.run(Boot01Application.class, args);
    }

}

  新增分頁啟動器,pagehelper-spring-boot-starter,與以前一樣使用即可

 PageHelper.startPage(pageNum,pageSize);
  List<Sysuser> all = sysuserService.all();
  PageInfo<Sysuser> list = new PageInfo<>(all);

 

7.非同步任務與定時任務

非同步任務:程式碼中執行的耗時任務,在非同步執行緒中執行。比如發簡訊,發郵件,網路請求,遠端介面呼叫等。

定時任務,使用quartz或者spring-task,按指定的時間執行任務

  非同步任務、定時任務:應該用第三方的中介軟體進行執行,如kafka rabbitmq,此處使用了執行緒池,因為還沒學到中介軟體。。。

//註冊執行緒池
    @Bean
    public ThreadPoolTaskExecutor createTaskExecutor(){
        ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
        threadPoolTaskExecutor.setCorePoolSize(5);
        threadPoolTaskExecutor.setMaxPoolSize(10);
        threadPoolTaskExecutor.setQueueCapacity(100);
        threadPoolTaskExecutor.setKeepAliveSeconds(40);
        threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        threadPoolTaskExecutor.initialize();
        return threadPoolTaskExecutor;
    }

  在啟動類上開啟非同步任務註解,@EnableAsync開啟非同步任務,然後在service層要執行的非同步方法上配合使用@Async註解,如下例:

//控制層方法,呼叫service層中的非同步方法。
@GetMapping("sendSms") public String sendSms(){ System.out.println("主執行緒:"+Thread.currentThread().getName()); sysuserService.sendSms(); System.out.println("主執行緒:"+Thread.currentThread().getName()); return "hello"; }



//這個是service層方法,使用Asnc註解,標明此方法是一個非同步方法,  @Async @Override
public void sendSms() { System.out.println("非同步發簡訊:123456789--"+Thread.currentThread().getName()); }

 

  執行結果如下:

  主執行緒:http-nio-8080-exec-1
  主執行緒:http-nio-8080-exec-1
  非同步發簡訊:123456789--createTaskExecutor-1



  定時任務:在伺服器啟動後,在後臺預設按照指定時間策略重複執行的任務。此處使用spring-task,首先在啟動類上開啟任務排程 @EnableScheduling,然後在任務類中的方法上新增@scheduled註解

   //開啟兩個定時任務 
@Scheduled(cron = "0/5 * * * * ?") public void test01(){ System.out.println("每隔⑤秒執行一次"); } @Scheduled(cron = "0/7 * * * * ?") public void test02(){ System.out.println("每隔⑦秒執行一次"); }

執行結果,

  每隔⑤秒執行一次
  每隔⑤秒執行一次
  每隔⑦秒執行一次
  每隔⑤秒執行一次
  每隔⑦秒執行一次
  每隔⑤秒執行一次
  每隔⑦秒執行一次
  每隔⑤秒執行一次

注意:springboot預設spring.task.scheduling.pool.size值為1,所以也就是單執行緒的,如果多個任務排程同時執行,並且其中有比較耗時的任務時,其他任務就會等待被阻塞直到該任務執行完成,可以在yml配置檔案中配置執行緒數量

spring:
  task:
    scheduling:
      pool:
        size: 5

 

相關文章