当前位置: 首页 > news >正文

网站做排名2015新年紫金网站建设公司

网站做排名2015新年,紫金网站建设公司,中文旅游网站html模板,冒用公司名做网站0. 为啥感觉升级了 win11 之后#xff0c;电脑像是刚买回来的#xff0c;很快 这篇加餐完全是一个意外#xff1a;时隔两年半#xff0c;再看 Springboot-quartz-starter 集成实现的时候#xff0c;不知道为啥我的h2 在应用启动的时候#xff0c;不能自动创建quartz相关…0. 为啥感觉升级了 win11 之后电脑像是刚买回来的很快 这篇加餐完全是一个意外时隔两年半再看 Springboot-quartz-starter 集成实现的时候不知道为啥我的h2 在应用启动的时候不能自动创建quartz相关的schema。后面看了 springboot 的文档据说是可以做到的AI也是这么说的。 没办法只能看 QuartzAutoConfiguration 源码了。于是乎就有了这么个好活 没办法就当是一个支线任务了 1. AbstractScriptDatabaseInitializer 下面是熟悉的阉割后的 源码 package org.springframework.boot.sql.init;/*** Base class for an {link InitializingBean} that performs SQL database initialization* using schema (DDL) and data (DML) scripts.** author Andy Wilkinson* since 2.5.0*/ public abstract class AbstractScriptDatabaseInitializer implements ResourceLoaderAware, InitializingBean {// 构造入参配置private final DatabaseInitializationSettings settings;private volatile ResourceLoader resourceLoader;Overridepublic void afterPropertiesSet() throws Exception {// 初始化后就执行逻辑了initializeDatabase();}/*** Initializes the database by applying schema and data scripts.* return {code true} if one or more scripts were applied to the database, otherwise* {code false}*/public boolean initializeDatabase() {ScriptLocationResolver locationResolver new ScriptLocationResolver(this.resourceLoader);// 先后执行 schema, data 的脚本boolean initialized applySchemaScripts(locationResolver);return applyDataScripts(locationResolver) || initialized;}// 真正执行脚本前会走这个判断决定是否要执行脚本private boolean isEnabled() {if (this.settings.getMode() DatabaseInitializationMode.NEVER) {return false;}return this.settings.getMode() DatabaseInitializationMode.ALWAYS || isEmbeddedDatabase();}/*** Returns whether the database that is to be initialized is embedded.* return {code true} if the database is embedded, otherwise {code false}* since 2.5.1*/protected boolean isEmbeddedDatabase() {throw new IllegalStateException(Database initialization mode is this.settings.getMode() and database type is unknown);}private boolean applySchemaScripts(ScriptLocationResolver locationResolver) {return applyScripts(this.settings.getSchemaLocations(), schema, locationResolver);}private boolean applyDataScripts(ScriptLocationResolver locationResolver) {return applyScripts(this.settings.getDataLocations(), data, locationResolver);}private boolean applyScripts(ListString locations, String type, ScriptLocationResolver locationResolver) {ListResource scripts getScripts(locations, type, locationResolver);if (!scripts.isEmpty() isEnabled()) {runScripts(scripts);return true;}return false;}// 根据配置的 路径的字符串 - spring.Resource 类型private ListResource getScripts(ListString locations, String type, ScriptLocationResolver locationResolver) {if (CollectionUtils.isEmpty(locations)) {return Collections.emptyList();}ListResource resources new ArrayList();for (String location : locations) {for (Resource resource : doGetResources(location, locationResolver)) {if (resource.exists()) {resources.add(resource);}}}return resources;}private ListResource doGetResources(String location, ScriptLocationResolver locationResolver) {return locationResolver.resolve(location);}private void runScripts(ListResource resources) {runScripts(resources, this.settings.isContinueOnError(), this.settings.getSeparator(),this.settings.getEncoding());}protected abstract void runScripts(ListResource resources, boolean continueOnError, String separator,Charset encoding);private static class ScriptLocationResolver {private final ResourcePatternResolver resourcePatternResolver;private ListResource resolve(String location) throws IOException {// ...}}}再看几个它的实现类加载上配置类基本上可以知道它的使用方法了 2. 吾のDemo 始于测试类 package org.pajamas.spring.boot;import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.pajamas.example.starter.core.entity.AlbumEntity; import org.pajamas.example.starter.core.repo.AlbumRepo; import org.pajamas.example.test.AbstractApplicationTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Import; import org.springframework.test.context.TestPropertySource;import java.util.List;/*** author william* since 2024/5/30*/ DisplayName(what the interesting component) TestPropertySource(properties {spring.application.nameservice-example-test,// 屏蔽 liquibase 的干扰 spring.liquibase.enabledfalse }) Import(ExampleDatabaseInitializer.class) public class DatabaseInitializerTest extends AbstractApplicationTest {// 其实就一个 jpa 实体类的 repositoryAutowiredAlbumRepo repo;// DisabledDisplayName(execute DDL, DML automatically, as App startup)Testpublic void t0() throws Exception {// 预期的结果启动启动时自动创建表并插入一条记录ListAlbumEntity all this.repo.findAll();printErr(all);} }既然是测试就走简单的方式注册这个bean package org.pajamas.spring.boot;import org.springframework.boot.autoconfigure.sql.init.SqlDataSourceScriptDatabaseInitializer; import org.springframework.boot.autoconfigure.sql.init.SqlInitializationProperties; import org.springframework.boot.sql.init.DatabaseInitializationMode;import java.util.Collections;import javax.sql.DataSource;/*** author william* since 2024/5/30*/ public class ExampleDatabaseInitializer extends SqlDataSourceScriptDatabaseInitializer {public ExampleDatabaseInitializer(DataSource dataSource) {super(dataSource, getProperty());}private static SqlInitializationProperties getProperty() {SqlInitializationProperties properties new SqlInitializationProperties();properties.setSchemaLocations(Collections.singletonList(classpath:sql/schema.sql));properties.setDataLocations(Collections.singletonList(classpath:sql/data.sql));properties.setMode(DatabaseInitializationMode.ALWAYS);properties.setContinueOnError(false);return properties;} }schema.sql CREATE TABLE IF NOT EXISTS t_album (id bigint NOT NULL AUTO_INCREMENT,album_name varchar(32) DEFAULT NULL COMMENT album name,album_year int DEFAULT NULL COMMENT album publish year,create_date timestamp NULL DEFAULT NULL,create_user_id bigint DEFAULT NULL,update_date timestamp NULL DEFAULT NULL,update_user_id bigint DEFAULT NULL,ver int NOT NULL DEFAULT 0,del bigint NOT NULL DEFAULT 0,PRIMARY KEY (id),UNIQUE KEY uni_album_id_del (id,del) ) COMMENTalbum table;CREATE TABLE IF NOT EXISTS t_artist (id bigint NOT NULL AUTO_INCREMENT,artist_name varchar(32) DEFAULT NULL COMMENT artist name,artist_from varchar(32) DEFAULT NULL COMMENT shorten of country name,create_date timestamp NULL DEFAULT NULL,create_user_id bigint DEFAULT NULL,update_date timestamp NULL DEFAULT NULL,update_user_id bigint DEFAULT NULL,ver int NOT NULL DEFAULT 0,del bigint NOT NULL DEFAULT 0,PRIMARY KEY (id),UNIQUE KEY uni_artist_id_del (id,del) ) COMMENTartist table;data.sql insert intot_album (album_name,album_year,create_user_id,update_user_id ) values (Boomerang,2023,1023,1023 );3. 话说回来为甚么我的h2没有自动创建quartz的schema 这是springboot.Quartz的实现 接下来源码启动… package org.springframework.boot.jdbc.init;/*** {link InitializingBean} that performs {link DataSource} initialization using schema* (DDL) and data (DML) scripts.** author Andy Wilkinson* since 2.5.0*/ public class DataSourceScriptDatabaseInitializer extends AbstractScriptDatabaseInitializer {Overrideprotected boolean isEmbeddedDatabase() {try {// step into ..return EmbeddedDatabaseConnection.isEmbedded(this.dataSource);}catch (Exception ex) {logger.debug(Could not determine if datasource is embedded, ex);return false;}} }----------// org.springframework.boot.jdbc.EmbeddedDatabaseConnection/*** Convenience method to determine if a given data source represents an embedded* database type.* param dataSource the data source to interrogate* return true if the data source is one of the embedded types*/public static boolean isEmbedded(DataSource dataSource) {try {return new JdbcTemplate(dataSource)// step into ....execute(new IsEmbedded());}catch (DataAccessException ex) {// Could not connect, which means its not embeddedreturn false;}}----------// org.springframework.boot.jdbc.EmbeddedDatabaseConnection.IsEmbeddedOverridepublic Boolean doInConnection(Connection connection) throws SQLException, DataAccessException {DatabaseMetaData metaData connection.getMetaData();String productName metaData.getDatabaseProductName();if (productName null) {return false;}productName productName.toUpperCase(Locale.ENGLISH);// step into ...EmbeddedDatabaseConnection[] candidates EmbeddedDatabaseConnection.values();for (EmbeddedDatabaseConnection candidate : candidates) {if (candidate ! NONE productName.contains(candidate.getType().name())) {// 根据jdbc.url判断是不是一个 嵌入式数据库String url metaData.getURL();return (url null || candidate.isEmbeddedUrl(url));}}return false;}------------public enum EmbeddedDatabaseConnection {// H2 判断是否为嵌入式数据的依据/*** H2 Database Connection.*/H2(EmbeddedDatabaseType.H2, DatabaseDriver.H2.getDriverClassName(),jdbc:h2:mem:%s;DB_CLOSE_DELAY-1;DB_CLOSE_ON_EXITFALSE, (url) - url.contains(:h2:mem)),}破案我的h2 使用默认的 file(xxx.mv.db) 存储默认配置下(DatabaseInitializationMode.EMBEDDED), 只有内存嵌入式的数据库会开启这个特性。 要么配置 DatabaseInitializationMode.ALWAYS要么使用内存数据库 Anyway, h2支持好多种连接方式新版本h2, 默认的file模式采用mv的storeEngine 支持MVCC。所以说对于quartz这种依赖行锁的要求也是支持的。 4. 话又说回去… 这个东西对项目的意义是什么 可以试下这个如果你有一个连接数据库的测试环境或者你的程序很简单又或者 有特殊的xp内存数据库专门数据库的版本控制工具你的程序比较复杂或者 本身就需要数据库的版本控制工具如 Liquibase运行在严肃的生产环境
http://www.hkea.cn/news/14538669/

相关文章:

  • 国外化工网站模板服务器里怎么建设网站
  • 怎么做系统网站网站建设及维护包括范围
  • 家具网站建设需求网站制作里面链接怎么做
  • 新余网站建设人员企业网络安全管理
  • 简历模板做的最好的是哪个网站晋江市住房和城乡建设局网站是多少
  • 个人网站建设教程 ppt网站备案有什么坏处
  • 网站好坏wordpress id 作为别名
  • 自贡企业网站建设史志办干地情网站建设
  • 星宿网站建设wordpress站群源码
  • 家具企业网站模板建一个网站素材哪里来
  • 佛山网站建设哪家好竞价网站单页
  • 开原网站建设统计网络网站建设的目的
  • 陵县网站建设跨境电商自建站是什么意思
  • 办公oa系统大概多少钱seo优化前景
  • 教做宝宝衣服的网站17一起做网站童装
  • 网站维护 网站后台建设知识手机主题wordpress
  • 如何搭建自己得网站室内设计师之家
  • 酒店网站建设策划书怎么写app开发源码
  • 有哪些做的好的汽配零配件网站网站在网络文化建设方面的成果
  • 连网站建设做网站要学多久
  • 模板建站可以做优化吗天河营销型网站建设
  • 遵义网站建设制作电商网站页面布局
  • 长沙做网站 青创互联怎么开网店?去哪里注册?
  • 大企业门户网站建设wordpress获取页面内容
  • 做网站如何宣传网站推广的具体方案
  • 网站不足之处代理服务器地址列表
  • 北京企业网站推广价格张槎建网站服务
  • 泸州 网站建设个人养老保险查询
  • 阳春新农村建设网站西安网站seo诊断
  • 山东前网站建设网站制作将栏目分类