服务模块 spring-context 扩展机制

平台 Java 服务有两套框架,分别是 SpringBoot 和 JarsLink , 两套框架底层都基于 SpringFramework 。 使用方式上存在一定差异。

SpringBoot

SpringBoot 应用结构

SpringBoot 应用模板中 main 模块是一个标准的 SpringBoot 应用 , 使用 Mybatis , Mybatis-Plus 访问数据库。使用 Maven 作为构建工具。

开发 SpringBoot 应用

源代码文件说明

project.xml                                             newdao 平台服务项目配置文件
pom.xml                                                 Maven pom 文件
lib/                                                    私有依赖 jar 文件目录
.config/spring-boot/spring-boot-devtools.properties     springboot 热加载配置文件
src/main/java                                           用户代码文件目录,
src/main/java/MainSpringBootApplication.java            SpringBoot main 主类
src/main/gen-java                                       自动生成的代码目录,此目录下文件不能编辑,后续自动生成时会覆盖。
src/main/resource                                       配置文件目录
src/main/resource/application.yml                       springboot 应用配置文件,可编辑
src/main/resource/logback-spring.xml                    logback 日志配置文件,可编辑

依赖管理

添加公共依赖

公共依赖 jar 文件可以通过 Maven 仓库下载,直接在 pom.xml 文件中添加。

"auto generated start", "auto generated end" 注释之间的依赖是自动生成的依赖,后续生成代码会覆盖,手工添加的依赖应该在此注释块之外。

例如下面代码添加 jedis 依赖到应用

<dependencies>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>5.1.3</version>
    </dependency>
    <!-- auto generated start -->
    <!-- auto generated end -->
</dependencies>

添加私有依赖

私有依赖 jar 文件不可通过 Maven 仓库下载, 将 jar 文件复制到 lib 目录, 然后点击浏览器中"服务"的编译按钮。或者执行本地 IDE eclipse 中的 compile 项目。 执行上述操作后, 系统会扫描到 lib 目录下的 jar 文件, 并生成 pom.xml 中的依赖定义, 并将 jar 文件安装到 Maven 本地仓库。

添加应用代码

利用 SpringBoot 默认扫描机制,在 src/main/java 目录下约定的 package 下添加代码及注解,自动扫描注册到 spring context

常见的应用应用代码及其 package

  1. controller main.controller
  2. service main.service
  3. mapper main.mapper
  4. entity main.entity
  5. vo main.vo
  6. config main.common.config

SpringBoot 热加载配置

在 IDE 容器, 本地 IDE 开发环境中, 应用通过 SpringBoot Maven 插件运行 "spring-boot:run",支持热加载。

".config/spring-boot/spring-boot-devtools.properties" 是 SpringBoot 热加载配置文件,具体配置项的使用请参考 官方文档

定制 spring 系统配置

为了方便大多数的应用开发场景, 应用中的常用配置自动生成,代码在 "src/main/gen-java" 目录下,自动生成的配置包括 Datasource , Mybatis 配置等。

某些特殊情况下,可能需要定制这些自动生成的 bean,系统对此进行了支持,其基本原理如下。

  1. 查看 src/main/gen-java 下自动生成的代码,确定需要定制的 bean 名称及所属的类。
  2. 在 project.xml 中声明需要覆盖的 bean 名称,在此名称列表中的 bean ,其创建方法上的 spring 注解将会被注释,不再自动注册。
  3. 在定制的 config 类中使用依赖注入步骤1获得的系统配置类。
  4. 在定制的 config 类中创建相同名称的 bean,并使用系统配置类中自动生成的注解(可从系统配置类复制)
  5. 调用系统类的生成方法获得系统创建的 bean,调用其配置方法修改配置。

定制 Mybatis 配置 MybatisSqlSessionFactoryBean

  1. MybatisSqlSessionFactoryBean 在 src/main/gen-java 目录下 main.common.config 包中的 MainDatabaseConfig 类中创建,其名称与方法名相同: "sqlSessionFactory"
  2. project.xml 中添加如下配置: <overrideBean>sqlSessionFactory</overrideBean>
  3. 在 src/main/java 目录下 main.common.config 包中添加 MyDBConfig 配置类,从系统生成的 MainDatabaseConfig 配置类中复制方法签名及方法注解,使用依赖注入 MainDatabaseConfig,调用 MainDatabaseConfig 方法创建 MybatisSqlSessionFactoryBean,修改 MybatisSqlSessionFactoryBean 配置
@Configuration(value="main-MyDBConfig")
public class MyDBConfig {
    @Autowired
    MainDatabaseConfig dbconf;

    @Primary
    @Order(value = 1)
    @Bean(value="main-sqlSessionFactory")
    public MybatisSqlSessionFactoryBean sqlSessionFactory(
               @Qualifier("main-moduleDataSource") DruidDataSource dataSource,
               ApplicationContext appCtx
               ) throws Exception {
        MybatisSqlSessionFactoryBean ret =  dbconf.sqlSessionFactory(dataSource, appCtx);
        // 修改 MybatisSqlSessionFactoryBean 配置 
        return ret;
    }
}

JarsLink 应用和 SpringBoot 应用一样,使用 Mybatis, Nybaits-Plus 访问数据库 。 使用 Maven 作为构建工具。

JarsLink 应用运行机制和 SpringBoot 不同, SpringBoot 应用一般编译打包为一个可执行 jar 文件, 而 JarsLink 应用编译后的 jar 文件不能直接执行, 而是以 JarsLink 模块的形式, 运行在 Tomcat 中。

JarsLink 是 alibaba 开源的一套模块框架, JarsLink 每个应用模块都是一个 ApplicationContext , 和应用的主 ApplicationContext 构成父子关系。

Tomcat ROOT.war 集成了 JarsLink 模块系统,启动阶段会扫描注册所有的 JarsLink 模块并注册,开发阶段, IDE 容器或者 本地 IDE 开发环境下, JarsLink模块支持热加载,监控 target/classes 目录下的变化,自动刷新模块。

JarsLink模块扫描目录

/work/jarslink                          云端 IDE 容器 JarsLink 模块目录,每个子目录是一个 JarsLink 模块
{本地ide安装目录}/work/jarslink           本地 IDE 开发环境中 JarsLink 模块目录,  每个子目录是一个 JarsLink 模块

源代码文件说明

project.xml                                                 newdao 平台服务项目配置文件
pom.xml                                                     Maven pom 文件
lib/                                                        私有依赖 jar 文件目录
src/main/java                                               用户代码文件目录,
src/main/gen-java                                           自动生成的代码目录,此目录下文件不能编辑,后续自动生成时会覆盖。
src/main/resource                                           配置文件目录
src/main/resource/main-spring-mybatis.xml                   Mybatis 配置文件,可编辑。
src/main/resource/META-INF/spring/springmvc-servlet.xml     spring context 定义文件,不可编辑

依赖管理

添加公共依赖

公共依赖 jar 文件可以通过 Maven 仓库下载,直接在 pom.xml 文件中添加。

"auto generated start", "auto generated end" 注释之间的依赖是自动生成的依赖,后续生成代码会覆盖,手工添加的依赖应该在此注释块之外。

例如下面代码添加 jedis 依赖到应用

<dependencies>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>5.1.3</version>
    </dependency>
    <!-- auto generated start -->
    <!-- auto generated end -->
</dependencies>

添加私有依赖

私有依赖 jar 文件不可通过 Maven 仓库下载, 将 jar文件复制到 lib目录, 然后点击浏览器中"服务"的编译按钮。或者执行本地 IDE eclipse 中的 compile 项目。 执行上述操作后, 系统会扫描到 lib 目录下的 jar 文件, 并生成 pom.xml 中的依赖定义, 并将 jar 文件安装到 Maven 本地仓库。

添加 Java 代码

利用 spring 默认扫描机制,在 src/main/java 目录下约定的 package 下添加代码及注解,自动扫描注册到 spring context

常见的应用应用代码及其 package

  1. controller main.controller
  2. service main.service
  3. mybatis mapper main.dao
  4. entity main.model
  5. vo main.vo
  6. config main.common.config

注意: JarsLink 模块中的 controller 其请求映射路径需要以模块名开始,例如当前模块是 "main" 那么 controller 中映射的的路径必须是 "/main/xxx"

添加 spring context xml 配置文件

在 src/main/resources/META-INF/spring 目录中可添加一个或者多个 spring context xml 配置文件,系统初始时会自动扫描并用于初始化 ApplicationContext

注意:"springmvc-servlet.xml" 这个文件由系统自动生成,用于自定义xml 文件不要与之重名,否则会被覆盖。 通过上述方法扩展 ApplicationContext 时,使用注解自动扫描加入的 java 类不要在 xml 中重复定义,否则会出现重复定义错误。

定制 spring 系统配置

为了方便大多数的应用开发场景, 应用中的常用配置自动生成,代码在 "src/main/gen-java" 目录下,自动生成的配置包括 Datasource , Mybatis 配置等。

某些特殊情况下,可能需要定制这些自动生成的bean,系统对此进行了支持,其基本原理如下。

  1. 查看 src/main/gen-java 下自动生成的代码,确定需要定制的 bean 名称及所属的类。
  2. 在 project.xml 中声明需要覆盖的 bean 名称,在此名称列表中的 bean ,其创建方法上的 spring 注解将会被注释,不再自动注册。
  3. 在定制的 config 类中使用依赖注入步骤1获得的系统配置类。
  4. 在定制的 config 类中创建相同名称的 bean,并使用系统配置类中自动生成的注解(可从系统配置类复制)
  5. 调用系统类的生成方法获得系统创建的 bean,调用其配置方法修改配置。

定制 Mybatis 配置 MybatisSqlSessionFactoryBean

  1. MybatisSqlSessionFactoryBean 在 src/main/gen-java 目录下 main.common.config 包中的 MainDatabaseConfig 类中创建,其名称与方法名相同: "sqlSessionFactory"
  2. project.xml 中添加如下配置: <overrideBean>sqlSessionFactory</overrideBean>
  3. 在 src/main/java 目录下 main.common.config 包中添加 MyDBConfig 配置类,从系统生成的 MainDatabaseConfig 配置类中复制方法签名及方法注解,使用依赖注入 MainDatabaseConfig,调用 MainDatabaseConfig 方法创建 MybatisSqlSessionFactoryBean,修改 MybatisSqlSessionFactoryBean 配置
@Configuration(value="main-MyDBConfig")
public class MyDBConfig {
    @Autowired
    MainDatabaseConfig dbconf;

    @Primary
    @Order(value = 1)
    @Bean(value="main-sqlSessionFactory")
    public MybatisSqlSessionFactoryBean sqlSessionFactory(
               @Qualifier("main-moduleDataSource") DruidDataSource dataSource,
               ApplicationContext appCtx
               ) throws Exception {
        MybatisSqlSessionFactoryBean ret =  dbconf.sqlSessionFactory(dataSource, appCtx);
        // 修改 MybatisSqlSessionFactoryBean 配置 
        return ret;
    }
}

results matching ""

    No results matching ""