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設置為相同的前綴名。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM