SpringBoot项目迁移到tongweb

Spring Boot版本:2.1.3

Tongweb版本:7.0.4.2

数据库:达梦V8

 

第一步:排除内置Tomcat,在pom中更改此依赖,其他方式可自行百度

       <dependency>

           <groupId>org.springframework.boot</groupId>

           <artifactId>spring-boot-starter-web</artifactId>

           <!-- 去除内嵌tomcat -->

           <exclusions>

               <exclusion>

                   <groupId>org.springframework.boot</groupId>

                   <artifactId>spring-boot-starter-tomcat</artifactId>

               </exclusion>

           </exclusions>

       </dependency>

 

第二步:将打包方式更改为 war

<packaging>war</packaging>

 

第三步:修改启动类

使启动类继承 SpringBootServletInitializer 类,并重写 configure 方法

 

@SpringBootApplication

public class DemoApplication extends SpringBootServletInitializer {

    @Override

    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {

        return builder.sources(DemoApplication.class);

    }

    public static void main(String[] args) {

        SpringApplication.run(DemoApplication.class, args);

    }

}

 

注意:

1、使用Tomcat部署没有问题,但是在TongaWeb下出现java.lang.NoSuchMethodError:javax.validation.spi.ConfigurationState.getValueExtractors()Ljava/util/Set;
Caused by: java.lang.ClassNotFoundException: javax.validation.ParameterNameProvider

因为tomcat不带javax.validation,而TongWeb带javax.validation,使用版本不一致导致。

解决方式:把TongWeb安装目录lib下的validation-api删除替换为应用中的validation-api,我的是validation-api-2.0.1.Final.jar

2、一个容器中部署多个应用出现

Caused by: org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [org.springframework.cloud.context.environment.EnvironmentManager@3ebe27fc] with key 'environmentManager'; nested exception is javax.management.InstanceAlreadyExistsException: org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager

原因:spring.jmx是默认打开的,所以有两种解决办法
    办法1:spring.jmx.enabled=false
    办法2:在application中各自配置
        spring.jmx.default-domain=project1
        spring.jmx.default-domain=project2
        以保证domain是两个不一样的

 

后端部署的时候注意后缀改成前端做配置的后缀

前端将之前的zip包后缀名改为war部署即可,注意前端文件直接打成zip后改名,不可将外层的文件夹打成zip包

 

达梦数据库踩坑:

1、 tongweb不支持log4jdbc,以下写法连不上数据库(我没找到解决方法)

datasource:
 
url: jdbc:log4jdbc:dm://127.0.0.1:5236/SYSDBA?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
  username: SYSDBA
  password: SYSDBA
  driver-class-name: net.sf.log4jdbc.DriverSpy

2、将达梦数据库驱动包作为lib放在项目文件夹里面,并在pom添加依赖,这种做法会导致报驱动类classNotFound错误

3、正确做法:将jar包安装至本地maven仓库

mvn install:install-file -Dfile=电脑本地目录\DmJdbcDriver18.jar -DgroupId=com.dm -DartifactId=DmJdbcDriver18 -Dversion=1.8 -Dpackaging=jar

 

pom添加

 <dependency>
   <groupId>com.dm</groupId>
   <artifactId>DmJdbcDriver18</artifactId>
   <version>1.8</version>
</dependency>

 

数据库配置

datasource:
 
driver-class-name: dm.jdbc.driver.DmDriver
  url: jdbc:dm://127.0.0.1:5236/SYSDBA?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
  username: SYSDBA
  password: SYSDBA

4、       前端页面刷新404问题

原因解析:

之所以你在浏览器内可以由首页跳转到其他路由地址,是因为这是由前端自行渲染的,你在React Router定义了对应的路由,脚本并没有刷新网页访问后台,是JS动态更改了location。

当你刷新时,你首先是访问的后台地址,然后返回的页面内加载了React代码,最后在浏览器内执行;也就是说如果这个时候报404,是因为你后台并没有针对这个路由给出返回HTML内容,也谈不上执行React Router了。

之前用的是nginx,在nginx中配置了try_files

现在解决方式为在tongweb的安装目录conf/ default-web.xml中添加

    <error-page>

        <error-code>404</error-code>

            <location>/index.html</location>

</error-page>

5、       前端项目部署的时候有前缀导致访问404,此处需要前端同学打包的时候base设置为相同的前缀名。

 

posted @ 2021-02-19 15:31  不要学我说话  阅读(9507)  评论(0编辑  收藏  举报