Skip to content

k807/spring-remote

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 

Repository files navigation

spring-remote

介绍:

spring-remote可以将接口实现部署在数据库中

spring容器在启动时会自动从数据库中获取远程接口实现,并对依赖接口的bean进行装配

spring-remote实现了接口实现或子类继承的可配置化,客户端只需声明依赖的接口,和使用配置好的spring-remote环境,无需关注实现细节,只需面向接口编程,spring-remote会自动从服务器获取接口实现

spring-remote服务端可将实现配置在数据库中,通过简单的标示即可切换实现,代码更新时,客户端代码也无需重新编译部署,只需重启spring容器

spring-remote兼容spring容器的ioc,aop功能,对bean的操作和配置与本地bean一致

环境

当前开发版代码是基于自己写的简易版的spring环境,拥有spring容器基础的ioc,aop功能

基础springIOC AOP容器

  1. <property name="" value=""> 支持String类型
  2. <property name="" ref=""> 支持引用类型
  3. 类的实例化仅支持空参构造器
  4. 支持BeanPostProcessor增强bean

使用说明

客户端:

配置服务端数据库源

<db-property>
    <driver>com.mysql.jdbc.Driver</driver>
    <url>jdbc:mysql://localhost:3306/test</url>
    <username>root</username>
    <password>root</password>
</db-property>

remote-name 远程实现类的标识名称

需要配置remote-name属性,其他与基础spring-bean配置方式一致 接口实现类默认取version值最大的版本

<bean id="" remote-name="">
    <property></property>
</bean>

version 指定远程实现类的版本

如果需要指定的remote接口实现版本,则可以指定version版本号

<bean id="" remote-name="" version="">
    <property></property>
</bean>

persistent 是否将实现类保存在本地

指定persisten关键字,可以将实现类class保存在本地,当指定了version时,加载bean时只会在本地校验class文件的版本号等于version

<bean id="" remote-name="" version="" persistent="true">
    <property></property>
</bean>

如果不指定version,加载bean时会与数据库进行版本比较,如果数据库最新版本大于当前本地版本,则重新获取最新版本class保存在本地

<bean id="" remote-name="" persistent="true">
    <property></property>
</bean>

动态热加载

指定hotswap关键字,会以15s的间隔定期检查是否有新的bean版本,如果存在,则进行热加载热替换

<bean id="" remote-name="" hotswap="true">
    <property></property>
</bean>

服务端:

按照约定配置bean数据库 库名为remote_beans,表结构如下

列名 列属性 是否主键 是否可空 备注
id int y n 可以自己设置递增规则
class_name varchar n n 类的全路径名
interface_name varchar n y 实现的接口,没有接口则为空
remote_name varchar n n 自己设置的名字,可以不唯一,客户端通过remote_name 找到依赖的接口实现
version int n n 一个实现类的版本, 客户端可以通过制定version指定需要的类,相同remote_name version不能相同
open boolean n n 是否开放,如果为false,则不会被客户端访问到
class_byte n n n class文件,不允许修改

注意事项

  1. 客户端预留的接口不可随意更改包位置
  2. 客户端不可随意更改接口信息
  3. 服务端的中的表class_name填写实现类的类全路径名,例如com.doc包下的ServiceImpl类,需要填写的class_name为com.doc.ServiceImpl
  4. 客户端更改实现类版本号只需指定version
  5. 服务端想更改客户端默认使用的实现类,只需将实现类的version设为最大值

About

A Spring container implementation that can remotely load beans

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages