亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Spring中執行sql腳本文件

發布時間:2021-05-18 18:04:00 來源:億速云 閱讀:383 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關如何在Spring中執行sql腳本文件,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

解決方法:

//Schema 處理器
@Component
public class SchemaHandler {
  private final String SCHEMA_SQL = "classpath:schema.sql";
  @Autowired
  private DataSource datasource;
  @Autowired
  private SpringContextGetter springContextGetter;

  public void execute() throws Exception {
    Resource resource = springContextGetter.getApplicationContext().getResource(SCHEMA_SQL);
    ScriptUtils.executeSqlScript(datasource.getConnection(), resource);
  }
}

// 獲取 ApplicationContext
@Component
public class SpringContextGetter implements ApplicationContextAware {

  private ApplicationContext applicationContext;

  public ApplicationContext getApplicationContext() {
    return applicationContext;
  }

  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    this.applicationContext = applicationContext;
  }
}

備注:

關于為何 Spring 會去執行 classpath:schema.sql,可以參考源碼

org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer#runSchemaScripts

private void runSchemaScripts() {
    List<Resource> scripts = getScripts("spring.datasource.schema",
        this.properties.getSchema(), "schema");
    if (!scripts.isEmpty()) {
      String username = this.properties.getSchemaUsername();
      String password = this.properties.getSchemaPassword();
      runScripts(scripts, username, password);
      try {
        this.applicationContext
            .publishEvent(new DataSourceInitializedEvent(this.dataSource));
        // The listener might not be registered yet, so don't rely on it.
        if (!this.initialized) {
          runDataScripts();
          this.initialized = true;
        }
      }
      catch (IllegalStateException ex) {
        logger.warn("Could not send event to complete DataSource initialization ("
            + ex.getMessage() + ")");
      }
    }
  }

/**
 * 默認拿 classpath*:schema-all.sql 和 classpath*:schema.sql
 */
private List<Resource> getScripts(String propertyName, List<String> resources,
      String fallback) {
    if (resources != null) {
      return getResources(propertyName, resources, true);
    }
    String platform = this.properties.getPlatform();
    List<String> fallbackResources = new ArrayList<String>();
    fallbackResources.add("classpath*:" + fallback + "-" + platform + ".sql");
    fallbackResources.add("classpath*:" + fallback + ".sql");
    return getResources(propertyName, fallbackResources, false);
  }

關于如何在Spring中執行sql腳本文件就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新乡县| 光山县| 井冈山市| 博客| 凤翔县| 安岳县| 泗水县| 祥云县| 云安县| 信阳市| 海兴县| 昭平县| 城市| 唐河县| 疏附县| 察雅县| 凤阳县| 平利县| 石楼县| 长泰县| 长宁县| 和田市| 油尖旺区| 高青县| 婺源县| 西华县| 田林县| 林州市| 寿阳县| 和龙市| 平阳县| 新平| 溆浦县| 乌拉特后旗| 西乌| 隆昌县| 涪陵区| 张北县| 昌都县| 丰县| 商水县|