报错解释:
这个错误表明你尝试执行名为 deploy.sh 的脚本文件时遇到了问题。具体来说,是因为该脚本文件的第一行(shebang行)中的解释器路径 /bin/bash^M 后面跟了一个 ^M,这个字符实际上是Windows风格的行结束符\r\n(即CR+LF),而Unix/Linux系统中只使用LF作为行结束符。因此,shell在尝试执行时找不到 /bin/bash^M 指定的解释器,因为这个路径是无效的。
解决方法:
你需要将脚本中的Windows风格的行结束符\r\n转换为Unix/Linux的行结束符\n。可以使用dos2unix命令或者sed命令来转换文件。
执行以下命令之一:
如果你有 dos2unix 工具安装:
dos2unix deploy.sh
如果你只有 sed 命令:
sed -i 's/\r$//' deploy.sh
转换完成后,你应该能够正常执行脚本:
./deploy.sh
公司项目用的微服务架构
苦于每次需要手动改数据库表
然后我在想能不能集成一个数据库版本管理工具
调查选择flyway
因为项目是分布式的,每个服务有一个数据库
然后我的做法是创建一个共同的子工程来统一管理sql文件
然后再resources目录创建每个工程对应的文件夹
再总的application.yml写入
#前缀: V 代表版本变迁(Versioned Migrations), U 代表撤销变迁(Undo Migrations), R 代表可重复变迁(Repeatable Migrations)
#版本号: 唯一的版本号,比如V1.0.1
#分隔符: __ (两个下划线)
#描述信息: 描述信息
#后缀: .sql
flyway:
# 是否开启flyway
enabled: true
encoding: utf-8
# 是否禁用数据库清理
clean-disabled: true
# 若连接的数据库非空库,是否初始化
# 当迁移时发现目标schema非空,而且带有没有元数据的表时,是否自动执行基准迁移,默认false.
baseline-on-migrate: true
# sql脚本文件名前缀,默认大写V
sql-migration-prefix: V
# sql脚本文件名称的分隔符,默认2个下划线__
sql-migration-separator: __
# 迁移sql脚本文件名称的后缀
sql-migration-suffixes: .sql
# metadata 版本控制信息表 默认 flyway_schema_history
table: flyway_schema_history
# 指定 baseline 的版本号,默认值为 1, 低于该版本号的 SQL 文件, migrate 时会被忽略
baseline-version: 1
然后再每个服务的配置文件中写入
flyway:
# 默认存放sql脚本目录,默认为db/migration
locations: classpath:db/migration/im
指定每个工程sql位置
即可。。。。
sql文件的命名规则如下:
前缀: V 代表版本变迁(Versioned Migrations), U 代表撤销变迁(Undo Migrations), R 代表可重复变迁(Repeatable Migrations)
版本号: 唯一的版本号,比如V1.0.1
分隔符: __ (两个下划线)
描述信息: 描述信息
后缀: .sql
V1.0.0__create_user.sql
目前有liquibase和flyway
我在通用子工程中添加了一个config配置类
但是项目启动不能自动注入
发现需要在resources下的META-INF文件夹里的
spring.factories
里面添加配置类的全限类名
然后就可以注入了
这个是为啥那
我为啥直接在类上不能注入那?