1. 程式人生 > >專案部署時自動初始化資料庫的方法

專案部署時自動初始化資料庫的方法

今天有一個需求,就是在專案啟動的時候向資料庫裡面插入一條資料。
第一種:繼承 Spring 的 BeanPostProcessor 類,程式碼如下

public class BeanPostPrcessorImpl implements BeanPostProcessor {
private ICompanyService companyService;
public ICompanyService getCompanyService() {
   return companyService;
}

public void setCompanyService(ICompanyService companyService) {
   this.companyService = companyService;
}

// Bean 例項化之前進行的處理
public Object postProcessBeforeInitialization(Object bean, String beanName)
    throws BeansException {
   System.out.println("物件" + beanName + "開始例項化");
   return bean;
}

// Bean 例項化之後進行的處理
public Object postProcessAfterInitialization(Object bean, String beanName)
    throws BeansException {
   System.out.println("物件" + beanName + "例項化完成");
   List<User> list = companyService.findAll("from User");
   if (list.size() <= 0) {
    User user = new User();
    user.setName("ahhffl");
    user.setPassword("ahhffl");
    companyService.addObject(user);
   }
   return bean;
}
}

但是每個bean 初始化的時候 這個類的方法都會被呼叫,而我只想插入一條資料,所以效率不好。

參考:http://blog.csdn.net/chensugang/archive/2008/12/01/3423650.aspx

第二種:想起可以用Spring 的init-method 這種方式,他可以再bean 例項化之後 初始化一個指定的方法,
但是這個方法必須無參,沒有返回值的。程式碼如下:

public void init() throws Exception { 
        System.out.println("JavaBean類init 方法"); 
        List<User> list = basicDao.findAll("from User");
   if(list.size() <= 0){
    User user = new User();
    user.setName("ahhffl");
    user.setPassword("ahhffl");
    basicDao.saveUser(user);
    System.out.println(user.getName());
    System.out.println(user.getPassword());
    System.out.println(user.getId());
   } 
    }

但是這種hibernate 事務 總是不提交,所以結果是:啟動的時候控制檯有列印SQL語句,但是事務沒有提交,資料庫看不了資料。設定一下(<property name="connection.autocommit">true </property>)
就可以成功啦,但是設定了自動提交,對Spring管理Hibernate 就不好啦。

第三種:繼承Spring 的 ApplicationListener 這個介面。藉助Spring監聽介面為資料庫初始化資料,程式碼如下:
public class ApplicationListenerImpl implements ApplicationListener {
private ICompanyService companyService;
    public ICompanyService getCompanyService() {
   return companyService;
}

public void setCompanyService(ICompanyService companyService) {
   this.companyService = companyService;
}

@Override
public void onApplicationEvent(ApplicationEvent arg0) {
   List<User> list = companyService.findAll("from User");
   if(list.size() <= 0){
    User user = new User();
    user.setName("ahhffl");
    user.setPassword("ahhffl");
    companyService.addObject(user);
   }
  
}
}

轉載地址


相關推薦

專案部署自動初始資料庫方法

今天有一個需求,就是在專案啟動的時候向資料庫裡面插入一條資料。 第一種:繼承 Spring 的 BeanPostProcessor 類,程式碼如下public class BeanPostPrcessorImpl implements BeanPostProcessor {

WordPress 自動初始資料庫

背景 自動化搭建開發環境、測試、部署如通過網頁操作(訪問 /wp-admin/install.php)相對比較麻煩且在有的場景無法實現。 步驟 修改 wp-config.php 配置 wordpress 的資料庫資訊。 在與wp-config.php 同級的目錄新建custom_install

web專案啟動自動啟動mysql資料庫

背景介紹:    最近在學習spring,看到容器事件ApplicationEvent時,突然想到一個問題,因為在本地搭建了一套學習環境,每次啟動web專案時都要首先手動啟動mysql,有時忘了啟動mysql時,控制檯就會丟擲資料庫連線失敗的異常資訊,所以就在想,能否利用容器

springWeb專案啟動自動載入方法及web專案啟動不能獲得spring的bean的解決方式

方式一:利用註解的方式和構造方法 @Service("testService") public class TestService { @Autowired private Service service; /** * spring在初始化bea

Greenplum初始資料庫出現gpadmin-[ERROR]:-gpstart error: Do not have enough valid segments to start the arr

啟動初始化greenplum資料庫報錯資訊如下所示 [[email protected] gpAdminLogs]$ gpstart 20181018:01:09:27:043309 gpstart:mdw:gpadmin-[INFO]:-Starting gps

一種多個子資料庫與中心庫之間同步或初始方法與流程

SyncNavigator 資料酷同步工具 做資料同步時所支援的資料庫型別: 支援sqlserver 2000-2014所有版本,全相容,和MYsql 4.x 、MYsql 5.x 、MYsql 6.x版本。 來源資料庫和目標資料庫可以版本不同,比如:來源資料庫是sq

Spring例項各種初始方法執行順序

帶序號的步驟來自Spring實戰(第4版),紅字為補充部分。 1.Spring對bean進行例項化; Constructor構造方法 2.Spring將值和bean的引用注入到bean對應的屬性中; 3.如果bean實現了BeanNameAware介面,Spring將bean的ID傳遞給

spring在web容器啟動執行初始方法(四種方式)

需求:在tomcat啟動時開啟一個定時任務,或初始化slor索引 想法:容器啟動時執行方法,最容易想到的就是servlet中可以配置load-on-startup,設定一個正整數也就可以隨容器一起啟動。 問題:上面的方法很好,但是由於定時任務需要去操作資料庫,而專案

Spring在Web容器啟動執行初始方法

需求:在tomcat啟動時開啟一個定時任務。 想法:容器啟動時執行方法,最容易想到的就是servlet中可以配置load-on-startup,設定一個正整數也就可以隨容器一起啟動。 問題:上面的方法很好,但是由於定時任務需要去操作資料庫,而專案採用了spring的依賴注入來管理物件,而serv

SpringBoot專案啟動自動執行指定方法

在SpringBoot中,有兩種介面方式實現啟動執行,分別是ApplicationRunner和CommandLineRunner,除了可接受引數不同,其他的大同小異 ApplicationRunner : import org.springfr

關於maven專案初始資料庫的一些經驗

初始化資料庫執行init-db.bat檔案,先要在mysql中建立一個數據庫,根據配置 jdbc.type=mysql jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/jeesit

在vue專案建立的後初始首次使用stylus安裝方法

專案建立報錯: This dependency was not found: * !!vue-style-loader!css-loader?{"minimize":false,"sourceM

java程式啟動專案初始方法

一、啟動監聽ApplicationListener spring mvc 啟動監聽,實現ApplicationListener<ContextRefreshedEvent>介面,然後過載 onApplicationEvent(ContextRefreshedEv

node命令列工具之實現專案工程自動初始的標準流程

## 一、目的 傳統的前端專案初始流程一般是這樣: ![傳統流程](https://wangxiaokai.vip/images/2019-08-11-make-command-line-interface/1.png) 可以看出,傳統的初始化步驟,花費的時間並不少。而且,人工操作的情況下,**總有

定義結構體初始默認值

sans post 建議 src pre 問題: -h ber 保險 結構體變量定義時的初始化問題: 默認值同變量一樣。int型的為0,指針型的為“NULL”------------並非整個結構體為NULL。當中的int型還是有值0的,僅僅是指針型的為NULL 驗證一下

神經網絡中權值初始方法

網絡 mac tro 推導 6.4 linear diff ati soft from:http://blog.csdn.net/u013989576/article/details/76215989 權值初始化的方法主要有:常量初始化(constant)、高斯分布初始化(

centos7.2 安裝mysql8.0.11 並自動初始root密碼

exp AR community mysql- 8.0 AS unit mys temp 1 下載mysql-8.0.11-1.el7.x86_64.rpm-bundle.tar2 mdkir –p /home/mysql/3 上傳tar文件到/home/mysql 並解壓

SQL Server 2017 AlwaysOn AG 自動初始(二)

layout nag 服務 ocs 建議 engine idt 防火墻 vpd 必備條件文件路徑要求在 SQL Server 2016 中,自動種子設定要求數據和日誌文件路徑在參與可用性組的每個 SQL Server 實例上均相同。 在 SQL Server 2017 中,

SQL Server 2017 AlwaysOn AG 自動初始(十二)

class 無法 增加 tle 完整 之前 join 截斷 51cto 何時不使用自動種子設定在某些情況下,自動種子設定可能不是初始化次要副本的最優選擇。 自動種子設定過程中,SQL Server 通過網絡執行備份以進行初始化。 如果數據庫非常大或者次要副本是遠程副本,此過

SQL Server 2017 AlwaysOn AG 自動初始(十一)

自動 進行 備份 情況下 耗時 server serve 使用 日誌 何時不使用自動種子設定在某些情況下,自動種子設定可能不是初始化次要副本的最優選擇。 自動種子設定過程中,SQL Server 通過網絡執行備份以進行初始化。 如果數據庫非常大或者次要副本是遠程副本,此過程