有这么一个需求 每个部门,需要操作的数据库不同,A部门要将数据放test数据库,B 部门数据 要放在test1数据库 同一个项目 需要整合 多个数据源

上传个demo 方便自己以后回看!!!!!!!!!

https://github.com/SCchengbo/springboot-mybatis-demo.git

  1. springboot使用AOP 过滤请求:
    在pom文件中导入 aop所需要的依赖

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
  2. 定义切面
    package com.springboot.aop;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component; @Aspect
    @Component
    public class testAspect {
    private Logger logger = LoggerFactory.getLogger(getClass()); @Pointcut("execution(public * com.springboot.controller..*.*(..))")
    public void testPoint() {
    } @Before(value = "testPoint()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
    logger.info("前置通知");
    } @AfterReturning(returning = "ret", pointcut = "testPoint()")
    public void doAfterReturning(Object ret) throws Throwable {
    // 处理完请求,返回内容
    logger.info("RESPONSE : " + ret);
    }
  3.  @Pointcut("execution(public * com.springboot.controller..*.*(..))") 所有反问com.springboot.controller包下的请求 都 会被切面拦截 执行路径 http://localhost:8080/select?name=zhangsan
    2019-02-11 16:09:22.362 [http-nio-8080-exec-1] INFO  com.springboot.aop.testAspect:33 - 前置通知
    2019-02-11 16:09:22.366 [http-nio-8080-exec-1] INFO com.springboot.controller.Controller:15 - 接受到请求
    2019-02-11 16:09:22.366 [http-nio-8080-exec-1] INFO com.springboot.aop.testAspect:39 - RESPONSE : zhangsan

关于 springboot 使用@Scheduled 做定时任务:

  1. package com.springboot.scheduledtasks;
    
    import java.text.SimpleDateFormat;
    import java.util.Date; import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component; @Component
    public class ScheduledTasks {
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); @Scheduled(fixedRate = 5000)
    public void reportCurrentTime() {
    System.out.println("任务1:" + dateFormat.format(new Date()));
    } }
  2. 在启动类上面 必须添加@EnableScheduling 注解 不然 定时任务 不起作用
    任务1:17:10:22
    任务1:17:10:27
  3. ScheduledTasks原理:

    简要介绍:spring在初始化bean后,通过“postProcessAfterInitialization”拦截到所有的用到“@Scheduled”注解的方法,并解析相应的的注解参数,放入“定时任务列表”等待后续处理;之后再“定时任务列表”中统一执行相应的定时任务(任务为顺序执行,先执行cron,之后再执行fixedRate)。

    重要代码如下:

    第一步:依次加载所有的实现Scheduled注解的类方法。

    第二步:将对应类型的定时器放入相应的“定时任务列表”中。

    第三步:执行相应的定时任务。

    参考资料:https://blog.csdn.net/gaodebao1/article/details/51789225
  4. ScheduledTasks是单线程执行任务,平常 使用定时任务 用的xxl  如果是想要实现多线程 定时任务 则要重写
    configureTasks方法
    package com.springboot.scheduledtasks;
    
    import java.util.concurrent.Executors;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.scheduling.annotation.SchedulingConfigurer;
    import org.springframework.scheduling.config.ScheduledTaskRegistrar; @Configuration
    public class ScheduleConfig implements SchedulingConfigurer {
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
    // 设定一个长度10的定时任务线程池
    taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
    } }
  5. 测试多线程执行:
    package com.springboot.scheduledtasks;
    
    import java.text.SimpleDateFormat;
    import java.util.Date; import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component; @Component
    public class ScheduledTasks {
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); @Scheduled(fixedRate = 5000)
    public void reportCurrentTime() {
    System.out.println("任务1:" + dateFormat.format(new Date()));
    } @Scheduled(fixedRate = 5000)
    public void reportCurrentTime1() {
    System.out.println("任务2:" + dateFormat.format(new Date()));
    for (;;) { }
    } }
  6. 结果:
    任务1:17:18:32
    任务1:17:18:37
    任务1:17:18:42
    任务1:17:18:47
    任务1:17:18:52
ScheduledTasks平常用的比较少。都是公司内部自己封装的,也有类似xxl此类的定时任务

关于springboot 中 异步方法调用,原来 项目中 希望调用一个 不阻塞的方法的时候,是新创建一个线程 来 执行 需要的逻辑。。springboot 中直接可以使用@Async 标记需要异步执行的方法就可以了
package com.springboot.util;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; @Component
public class TestAsync {
@Async
public void testAsyncMethod() {
for (;;) { }
}
}
    @RequestMapping("/testAsync")
public void testAsync() {
testAsync.testAsyncMethod();
logger.info("测试异步调用");
}

一定需要在启动类中 添加@EnableAsync  注解  不然  异步方法调用 不起作用

springboot如何获取 properties文件中自定义的参数值

package com.springboot.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import com.springboot.util.TestAsync; @org.springframework.stereotype.Controller
public class Controller {
private static Logger logger = LoggerFactory.getLogger(Controller.class);
@Autowired
public TestAsync testAsync;
@Value("${time}")
public int time; @RequestMapping("/getTime")
@ResponseBody
public Integer getTime() {
return time; }

使用@Value注解

 @Value("${time}") 可以获取自定义的数据信息

springboot(整合多数据源demo,aop,定时任务,异步方法调用,以及获取properties中自定义的变量值)的更多相关文章

  1. springboot整合多数据源解决分布式事务

    一.前言        springboot整合多数据源解决分布式事务.             1.多数据源采用分包策略              2.全局分布式事务管理:jta-atomikos. ...

  2. springBoot整合多数据源

    springBoot整合相关 1:springBoot整合多数据源: 应用场景:     项目需要同时连接两个不同的数据库A, B,并且它们都为主从架构,一台写库,多台读库. 工具/版本: jdk1. ...

  3. 第九章 springboot + mybatis + 多数据源 (AOP实现)

    在第八章 springboot + mybatis + 多数据源代码的基础上,做两点修改 1.ShopDao package com.xxx.firstboot.dao; import org.spr ...

  4. SpringBoot整合多数据源实现

    项目架构 1.导入相关依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifac ...

  5. springboot整合多数据源及事物

    有两种方式:一种是分包的方式.一种是加注解的方式(@DataSource(ref="")). 分包方式:项目结构图如下: 分为com.itmayiedu.test01.com.it ...

  6. SpringBoot整合Druid数据源

    关于SpringBoot数据源请参考我上一篇文章:https://www.cnblogs.com/yueshutong/p/9409295.html 一:Druid介绍 1. Druid是什么? Dr ...

  7. springboot整合Quartz实现动态配置定时任务

    前言 在我们日常的开发中,很多时候,定时任务都不是写死的,而是写到数据库中,从而实现定时任务的动态配置,下面就通过一个简单的示例,来实现这个功能. 一.新建一个springboot工程,并添加依赖 & ...

  8. 【第九章】 springboot + mybatis + 多数据源 (AOP实现)

    在第八章 springboot + mybatis + 多数据源代码的基础上,做两点修改 1.ShopDao package com.xxx.firstboot.dao; import org.spr ...

  9. spring-boot整合dubbo启动demo

    参考资料: https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/reference/html/ https://github.com/apach ...

随机推荐

  1. 第一天 hello world

    二进制编译工具生成img软盘执行文件 二进制编译工具https://pan.baidu.com/s/1j3wAsFxTLWv17V55iNKJJw 利用Bz.exe工具写操作系统自启程序: 前0000 ...

  2. Ubuntu端口命令---查看端口占用及关闭

    Ubuntu查看端口使用情况,使用netstat命令: 查看已经连接的服务端口(ESTABLISHED) netstat -a 查看所有的服务端口(LISTEN,ESTABLISHED) netsta ...

  3. CF643D Bearish Fanpages

    题意 英文版题面 Problems Submit Status Standings Custom test .input-output-copier { font-size: 1.2rem; floa ...

  4. c的动态内存管理

    在linux系统下使用malloc提示警告,解决方法,加入头文件<stdlib.h> 首先来个基本的例子 int *p=(int *)malloc(sizeof(int));(当mallo ...

  5. C++中的智能指针、轻量级指针、强弱指针学习笔记

    一.智能指针学习总结 1.一个非const引用无法指向一个临时变量,但是const引用是可以的! 2.C++中的delete和C中的free()类似,delete NULL不会报"doubl ...

  6. dive 方便的观察容器各层信息的工具

      dive 是一个方便的观察容器各层信息的工具,同时也集成了容器构建命令,方便我们在构建容器 镜像的同时查询镜像各层的变动信息 安装 mac 系统,可以按照自己的系统选择安装方式 wget http ...

  7. VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中

    在开发项目时,需要知道当前发布的到底是哪个版本,比较好的方式就是获取SVN的版本来作为项目的版本.项目版本一般由主版本.次版本.内部版本.修改版本四个部分组成,我们获取的SVN版本就作为修改版本即可. ...

  8. 解决jpgraph在php7.0版本下时,无法显示例子图表的问题

    解决gpgraph4.02在php7.0显示空白框问题 Gpgraph类库强大的绘制图表的功能深受广大phper的喜爱,目前官方最新的版本是 jpgraph-4.0.2 ,适用于php5.0及7.0以 ...

  9. Oracle12C版本安装步骤

    一.下载路径 http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html file1,file ...

  10. No MaterialLocalizations found (Flutter)

    在显示SimpleDialog时候程序报错 No MaterialLocalizations found 没有找到 MaterialLocalizations 搜索找到原因 runApp 需要先调用 ...