koupleless 合并多个微服务应用到一个应用实例(包含springcloud gateway)

koupleless

Koupleless 是一种模块化的 Serverless 技术解决方案。基础原理是拆分成了基座+模块的概念。支持模块化开发。 适用的场景:

  • 应用合并部署
  • 模块化开发
  • 模块隔离
  • 插件化
  • 优化启动速度等
  • 热启动部署

拆分原则

  • 基座加载所需的所有基础依赖
  • 模块只需要将依赖改成provider
  • 如果模块依赖基座的bean例如数据源可以使用SpringBeanFinder.getBaseBean(DataSource.class)

maven 依赖

  • 基座
<dependency>  
    <groupId>com.alipay.sofa.koupleless</groupId>  
    <artifactId>koupleless-base-starter</artifactId>  
    <version>${koupleless.runtime.version}</version>  
</dependency>

-- 插件
<build>  
    <finalName>${project.artifactId}</finalName>  
    <plugins>  
        <plugin>  
            <groupId>com.alipay.sofa.koupleless</groupId>  
            <artifactId>koupleless-base-build-plugin</artifactId>  
            <version>${koupleless.runtime.version}</version>  
            <executions>  
                <execution>  
                    <goals>  
                        <goal>add-patch</goal>  
                    </goals>  
                </execution>  
            </executions>  
        </plugin>  
        <plugin>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-maven-plugin</artifactId>  
            <executions>  
                <execution>  
                    <goals>  
                        <goal>repackage</goal>  
                    </goals>  
                </execution>  
            </executions>  
        </plugin>  
    </plugins>  
</build>
  • 模块
<dependency>  
    <groupId>com.alipay.sofa.koupleless</groupId>  
    <artifactId>koupleless-app-starter</artifactId>  
    <version>${koupleless.runtime.version}</version>  
    <scope>provided</scope>  
</dependency>

<build>  
    <finalName>${project.artifactId}</finalName>  
    <plugins>  
        <!--这里添加ark 打包插件-->  
        <plugin>  
            <groupId>com.alipay.sofa</groupId>  
            <artifactId>sofa-ark-maven-plugin</artifactId>  
            <version>${sofa.ark.version}</version>  
            <executions>  
                <execution>  
                    <id>default-cli</id>  
                    <goals>  
                        <goal>repackage</goal>  
                    </goals>  
                </execution>  
            </executions>  
            <configuration>  
                <skipArkExecutable>true</skipArkExecutable>  
                <outputDirectory>./target</outputDirectory>  
                <bizName>hh-bidding</bizName>  
                <webContextPath>bidding</webContextPath>  
                <declaredMode>true</declaredMode>  
                <packExcludesConfig>rules.txt</packExcludesConfig>  
            </configuration>  
        </plugin>  
        <plugin>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-maven-plugin</artifactId>  
            <executions>  
                <execution>  
                    <goals>  
                        <goal>repackage</goal>  
                    </goals>  
                </execution>  
            </executions>  
        </plugin>  
    </plugins>  
</build>

注意事项

  • 模块的生命周期
    模块销毁会销毁到模块的所有bean,这个时候需要注意如果引用的基座bean的话如 Datasource,可能会被销毁。所有可以,解决方法
package com.ruoyi.common.core.xss;  
  
import javax.sql.DataSource;  
import java.io.PrintWriter;  
import java.sql.Connection;  
import java.sql.SQLException;  
import java.sql.SQLFeatureNotSupportedException;  
import java.util.logging.Logger;  
  
/**  
 * @author wxl  
 */public class MyDataSource implements DataSource {  
  
    public DataSource dataSource;  
  
    public MyDataSource(DataSource dataSource) {  
        this.dataSource = dataSource;  
    }  
  
    @Override  
    public Connection getConnection() throws SQLException {  
        return dataSource.getConnection();  
    }  
  
    @Override  
    public Connection getConnection(String username, String password) throws SQLException {  
        return dataSource.getConnection(username, password);  
    }  
  
    @Override  
    public <T> T unwrap(Class<T> iface) throws SQLException {  
        return dataSource.unwrap(iface);  
    }  
  
    @Override  
    public boolean isWrapperFor(Class<?> iface) throws SQLException {  
        return dataSource.isWrapperFor(iface);  
    }  
  
    @Override  
    public PrintWriter getLogWriter() throws SQLException {  
        return dataSource.getLogWriter();  
    }  
  
    @Override  
    public void setLogWriter(PrintWriter out) throws SQLException {  
  
    }  
  
    @Override  
    public void setLoginTimeout(int seconds) throws SQLException {  
        dataSource.setLoginTimeout(seconds);  
    }  
  
    @Override  
    public int getLoginTimeout() throws SQLException {  
        return dataSource.getLoginTimeout();  
    }  
  
    @Override  
    public Logger getParentLogger() throws SQLFeatureNotSupportedException {  
        return dataSource.getParentLogger();  
    }  
}
  • 声明新的ds
@Bean(name = "dataSource")  
@ConditionalOnMissingBean  
public DataSource dataSource() {  
 
   return new MyDataSource(SpringBeanFinder.getBaseBean(DataSource.class));  
}

spring cloud gateway 和web 应用合并问题

spring cloud gateway是webflux 和tomcat 部署到一起需要修改一些东西,基座需要引入

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

并配置

spring.main.web-application-type=servlet
  • spring cloud gateway 应用
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})  
@EnableWebFlux  
@Import({GatewayAutoConfiguration.class})  
public class RuoYiGatewayApplication {  
    public static void main(String[] args) {  
        SpringApplication.run(RuoYiGatewayApplication.class, args);  
    }  
}
  • EnableWebFlux 启用webflux
  • @Import({GatewayAutoConfiguration.class}) 引入spring cloud gateway 配置
1. 用户管理与个性化设置用户注册与角色:支持考生注册账号,填写目标院校、专业、考试科目等信息,系统基于此生成个性化学习方案;可设置 "学伴" 关系,支持共同学习与进度对比。个人中心:维护学习偏好(如每日学习时长、薄弱科目标记)、备考日程(如报名时间、考试时间倒计时),记录学习时长统计与阶段性目标完成情况。学习档案:自动存档错题记录、笔记内容、模考成绩,形成个人学习轨迹,支持按时间轴回顾备考历程。2. 学习资源管理科目资源整合:按考研公共课(政治、英语、数学)和专业课分类整合资源,包括:教材与参考书电子版(支持章节跳转、重点标注)历年真题(按年份、题型分类,附带详细解析)名师课程视频 / 音频(支持倍速播放、断点续播、笔记同步)高频考点总结(思维导图形式呈现,支持下载打印)资源推荐:基于用户目标专业和学习进度,推荐适配的复习资料(如 "考研英语阅读高频词汇"、"数学高数易错点汇总")。资源上传与分享:用户可上传原创笔记、总结资料,标记为 "公开" 供其他用户参考,或 "私有" 仅个人可见。3. 学习计划与进度管理智能计划生成:根据考试时间、科目数量、用户基础,自动生成阶段性学习计划(基础阶段、强化阶段、冲刺阶段),细化到每日学习任务(如 "今天完成高数第三章习题")。计划调整与自定义:支持用户手动调整计划,添加个性化任务(如 "背诵 100 个英语单词"),设置任务优先级和截止时间。进度追踪:实时记录各科目学习进度(如 "政治马原部分已完成 60%"),通过进度条、日历视图直观展示,未完成任务自动提醒。番茄钟与专注模式:内置专注计时工具,支持自定义时长(如 25 分钟学习 + 5 分钟休息),统计每日专注时长,生成专注度报表。4. 题库与模拟测试分类题库:按科目、章节、题型(选择题、填空题、简答题)构建题库,包含真题、模拟题、练习题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值