seata 启动报错 the {store.db.driver-class-name} can't be empty

Created on 17 Jan 2020  ·  4Comments  ·  Source: seata/seata

Version:1.0.0 ,Seata 启动报错 the {store.db.driver-class-name} can't be empty ,

registry.conf 文件 如下

`
registry {
type = "nacos"
nacos {
serverAddr = "10.10.10.10:8849"
namespace = ""
cluster = "default"
}
}
config {
type = "nacos"
nacos {
serverAddr = "10.10.10.10:8849"
namespace = ""
}
}

`

file.conf 文件 如下

service { vgroup_mapping.fsp_tx_group = "test_tx_group" default.grouplist = "127.0.0.1:8091" disableGlobalTransaction = false } store { mode = "db" db { datasource = "dbcp" db-type = "mysql" driver-class-name = "com.mysql.cj.jdbc.Driver" url = "jdbc:mysql://127.0.0.1:3306/seata?serverTimezone=GMT%2B8&characterEncoding=utf8" user = "xxxx" password = "xxxxxx" min-conn = 1 max-conn = 3 global.table = "global_table" branch.table = "branch_table" lock-table = "lock_table" query-limit = 100 } }

Exception in thread "main" io.seata.common.loader.EnhancedServiceNotFoundException: not found service provider for : io.seata.server.store.TransactionStoreManager caused by io.seata.common.exception.StoreException: the {store.db.driver-class-name} can't be empty at io.seata.core.store.db.AbstractDataSourceGenerator.getDriverClassName(AbstractDataSourceGenerator.java:59) at io.seata.server.store.db.DruidDataSourceGenerator.generateDataSource(DruidDataSourceGenerator.java:35) at io.seata.server.store.db.DatabaseTransactionStoreManager.init(DatabaseTransactionStoreManager.java:101) at io.seata.common.loader.EnhancedServiceLoader.initInstance(EnhancedServiceLoader.java:357) at io.seata.common.loader.EnhancedServiceLoader.loadFile(EnhancedServiceLoader.java:234) at io.seata.common.loader.EnhancedServiceLoader.loadFile(EnhancedServiceLoader.java:194) at io.seata.common.loader.EnhancedServiceLoader.load(EnhancedServiceLoader.java:89) at io.seata.server.session.db.DataBaseSessionManager.init(DataBaseSessionManager.java:82) at io.seata.common.loader.EnhancedServiceLoader.initInstance(EnhancedServiceLoader.java:357) at io.seata.common.loader.EnhancedServiceLoader.loadFile(EnhancedServiceLoader.java:234) at io.seata.common.loader.EnhancedServiceLoader.loadFile(EnhancedServiceLoader.java:194) at io.seata.common.loader.EnhancedServiceLoader.load(EnhancedServiceLoader.java:89) at io.seata.server.session.SessionHolder.init(SessionHolder.java:96) at io.seata.server.Server.main(Server.java:75)

Environment:

  • JDK version : 1.8
  • OS : CentOS 7.5

Most helpful comment

这个问题我也遇到了,我用的是type="nacos",因此file.conf 这个配置文件是不起作用的(@jarvisqi );
简单写下我解决的步骤;
我的环境:
OS: ubuntu 18.04 LTS
JDK version: 1.8
nacos server version: nacos-server-1.1.4
seata server version:seata-server-1.0.0

  • 将nacos server 跑起来;
  • [ ] 进入 nacos conf 目录:
  1. 将cluster.conf.example 修改cluster.conf ,你安装了几个nacos (集群),这里就填nacos 所在机子ip; 我只有一个,所以填本机ip:

it is ip

example

192.168.1.150

  1. application.properties里添加以下几行数据库配置信息:

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3366/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=usench1
db.password=123456

  1. 执行nacos-mysql.sql,前提是先创建nacos_config 数据库;

  2. 执行bin 目录 下的startup.sh:

bash startup.sh   (centos 下,直接sh startup.sh )
usench1@usench-computer:~/workspace/my-study/seata/nacos-server/bin$ bash startup.sh 
/home/usench1/app/jdk/jdk1.8.0_181/bin/java  -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/usench1/workspace/my-study/seata/nacos-server/logs/java_heapdump.hprof -XX:-UseLargePages -Djava.ext.dirs=/home/usench1/app/jdk/jdk1.8.0_181/jre/lib/ext:/home/usench1/app/jdk/jdk1.8.0_181/lib/ext:/home/usench1/workspace/my-study/seata/nacos-server/plugins/cmdb:/home/usench1/workspace/my-study/seata/nacos-server/plugins/mysql -Xloggc:/home/usench1/workspace/my-study/seata/nacos-server/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dnacos.home=/home/usench1/workspace/my-study/seata/nacos-server -Dloader.path=/home/usench1/workspace/my-study/seata/nacos-server/plugins/health -jar /home/usench1/workspace/my-study/seata/nacos-server/target/nacos-server.jar  --spring.config.location=classpath:/,classpath:/config/,file:./,file:./config/,file:/home/usench1/workspace/my-study/seata/nacos-server/conf/ --logging.config=/home/usench1/workspace/my-study/seata/nacos-server/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with cluster
nacos is starting,you can check the /home/usench1/workspace/my-study/seata/nacos-server/logs/start.out
usench1@usench-computer:~/workspace/my-study/seata/nacos-server/bin$
  1. 访问nacos,http://127.0.0.1:8848/nacos/#/login ,用户名:nacos,密码:nacos,成功进入,至此,nacos server 就算是完成了;
  • 将seata server 跑起来

  • [ ] 进入seata conf 目录

  1. 将registry.conf 修改如下:
registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"

  nacos {
    serverAddr = "192.168.1.150"
    namespace = ""
    cluster = "default"
  }
}

config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos"

  nacos {
    serverAddr = "192.168.1.150"
    namespace = ""
  }
}

注意点:namespace 填 命名空间ID ,我的public 命名空间ID 是空;serverAddr 是nacos 机子ip;

  1. 将seata github 代码里的config.txt (seata/script/config-center/config.txt)下载下来,放到本地seata server 的bin 目录下,修改里面的数据库配置信息(store.db.* 相关);
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enable-client-batch-send-request=false
transport.thread-factory.boss-thread-prefix=NettyBoss
transport.thread-factory.worker-thread-prefix=NettyServerNIOWorker
transport.thread-factory.server-executor-thread-prefix=NettyServerBizHandler
transport.thread-factory.share-boss-worker=false
transport.thread-factory.client-selector-thread-prefix=NettyClientSelector
transport.thread-factory.client-selector-thread-size=1
transport.thread-factory.client-worker-thread-prefix=NettyClientWorkerThread
transport.thread-factory.boss-thread-size=1
transport.thread-factory.worker-thread-size=8
transport.shutdown.wait=3
service.vgroup_mapping.my_test_tx_group=default
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false
client.rm.async.commit.buffer.limit=10000
client.rm.lock.retry.internal=10
client.rm.lock.retry.times=30
client.rm.report.retry.count=5
client.rm.lock.retry.policy.branch-rollback-on-conflict=true
client.rm.table.meta.check.enable=false
client.rm.report.success.enable=true
client.tm.commit.retry.count=5
client.tm.rollback.retry.count=5
store.mode=db
store.file.dir=file_store/data
store.file.max-branch-session-size=16384
store.file.max-global-session-size=512
store.file.file-write-buffer-cache-size=16384
store.file.flush-disk-mode=async
store.file.session.reload.read_size=100
store.db.datasource=dbcp
store.db.db-type=mysql
store.db.driver-class-name=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3366/seata?useUnicode=true
store.db.user=usench1
store.db.password=123456
store.db.min-conn=1
store.db.max-conn=3
store.db.global.table=global_table
store.db.branch.table=branch_table
store.db.query-limit=100
store.db.lock-table=lock_table
server.recovery.committing-retry-period=1000
server.recovery.asyn-committing-retry-period=1000
server.recovery.rollbacking-retry-period=1000
server.recovery.timeout-retry-period=1000
server.max.commit.retry.timeout=-1
server.max.rollback.retry.timeout=-1
client.undo.data.validation=true
client.undo.log.serialization=jackson
server.undo.log.save.days=7
server.undo.log.delete.period=86400000
client.undo.log.table=undo_log
client.log.exceptionRate=100
transport.serialization=seata
transport.compressor=none
metrics.enabled=false
metrics.registry-type=compact
metrics.exporter-list=prometheus
metrics.exporter-prometheus-port=9898
  1. 在seata server 的bin 目录下创建nacos-config.sh,内容如下:
#!/usr/bin/env bash
# Copyright 1999-2019 Seata.io Group.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at、
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

while getopts ":h:p:" opt
do
  case $opt in
  h)
    host=$OPTARG
  ;;
  p)
    port=$OPTARG
  ;;
  ?)
  echo "\033[31m USAGE OPTION: $0 [-h host] [-p port] \033[0m"
  exit 1
  ;;
  esac
done

if [[ -z ${host} ]]; then
    host=localhost
fi
if [[ -z ${port} ]]; then
    port=8848
fi
nacosAddr=$host:$port
echo "set nacosAddr=$nacosAddr"
contentType="content-type:application/json;charset=UTF-8"

failCount=0
tempLog=$(mktemp -u)
function addConfig() {
curl -X POST -H "${1}" "http://$2/nacos/v1/cs/configs?dataId=$3&group=SEATA_GROUP&content=$4" >"${tempLog}" 2>/dev/null
  if [[ -z $(cat "${tempLog}") ]]; then
    echo "\033[31m Please check the cluster status. \033[0m"
    exit 1
  fi
 if [[ $(cat "${tempLog}") =~ "true" ]]; then
    echo "Set $3=$4\033[32m successfully \033[0m"
  else
    echo "Set $3=$4\033[31m failure \033[0m"
    (( failCount++ ))
  fi
}
count=0

echo $(dirname "$PWD")

shellPath=`cd $(dirname $0);pwd -P`

for line in $(cat $shellPath/config.txt); do
  (( count++ ))
  key=${line%%=*}
  value=${line#*=}
  #echo "${contentType}" "${nacosAddr}" "${key}" "${value}"
  addConfig "${contentType}" "${nacosAddr}" "${key}" "${value}"
done

echo "========================================================================="
echo " Complete initialization parameters, \033[32m total-count:$count \033[0m, \033[31m failure-count:$failCount \033[0m"
echo "========================================================================="
if [[ ${failCount} -eq 0 ]]; then
    echo "\033[32m Init nacos config finished, please start seata-server. \033[0m"
else
    echo "\033[31m init nacos config fail. \033[0m"
fi
  1. 执行nacos-conf.sh, 注:先保证nacos server 已启动成功;执行完脚本后,登录nacos web 就可以看见新添加的参数了(在public 空间);脚本是我修改过的,脚本默认是在public 空间里添加参数,如果想在自己创建的空间下添加配置呢?有知道的请告知,不过nacos web 里有个克隆按钮;
usench1@usench-computer:~/workspace/my-study/seata/seata-server/bin$ bash nacos-config.sh 127.0.0.1:8848
set nacosAddr=localhost:8848
/home/usench1/workspace/my-study/seata/seata-server
Set transport.type=TCP\033[32m successfully \033[0m
Set transport.server=NIO\033[32m successfully \033[0m
Set transport.heartbeat=true\033[32m successfully \033[0m
Set transport.enable-client-batch-send-request=false\033[32m successfully \033[0m
Set transport.thread-factory.boss-thread-prefix=NettyBoss\033[32m successfully \033[0m
Set transport.thread-factory.worker-thread-prefix=NettyServerNIOWorker\033[32m successfully \033[0m
Set transport.thread-factory.server-executor-thread-prefix=NettyServerBizHandler\033[32m successfully \033[0m
Set transport.thread-factory.share-boss-worker=false\033[32m successfully \033[0m
Set transport.thread-factory.client-selector-thread-prefix=NettyClientSelector\033[32m successfully \033[0m
Set transport.thread-factory.client-selector-thread-size=1\033[32m successfully \033[0m
Set transport.thread-factory.client-worker-thread-prefix=NettyClientWorkerThread\033[32m successfully \033[0m
Set transport.thread-factory.boss-thread-size=1\033[32m successfully \033[0m
Set transport.thread-factory.worker-thread-size=8\033[32m successfully \033[0m
Set transport.shutdown.wait=3\033[32m successfully \033[0m
Set service.vgroup_mapping.my_test_tx_group=default\033[32m successfully \033[0m
Set service.default.grouplist=127.0.0.1:8091\033[32m successfully \033[0m
Set service.enableDegrade=false\033[32m successfully \033[0m
Set service.disableGlobalTransaction=false\033[32m successfully \033[0m
Set client.rm.async.commit.buffer.limit=10000\033[32m successfully \033[0m
Set client.rm.lock.retry.internal=10\033[32m successfully \033[0m
Set client.rm.lock.retry.times=30\033[32m successfully \033[0m
Set client.rm.report.retry.count=5\033[32m successfully \033[0m
Set client.rm.lock.retry.policy.branch-rollback-on-conflict=true\033[32m successfully \033[0m
Set client.rm.table.meta.check.enable=false\033[32m successfully \033[0m
Set client.rm.report.success.enable=true\033[32m successfully \033[0m
Set client.tm.commit.retry.count=5\033[32m successfully \033[0m
Set client.tm.rollback.retry.count=5\033[32m successfully \033[0m
Set store.mode=db\033[32m successfully \033[0m
Set store.file.dir=file_store/data\033[32m successfully \033[0m
Set store.file.max-branch-session-size=16384\033[32m successfully \033[0m
Set store.file.max-global-session-size=512\033[32m successfully \033[0m
Set store.file.file-write-buffer-cache-size=16384\033[32m successfully \033[0m
Set store.file.flush-disk-mode=async\033[32m successfully \033[0m
Set store.file.session.reload.read_size=100\033[32m successfully \033[0m
Set store.db.datasource=dbcp\033[32m successfully \033[0m
Set store.db.db-type=mysql\033[32m successfully \033[0m
Set store.db.driver-class-name=com.mysql.jdbc.Driver\033[32m successfully \033[0m
Set store.db.url=jdbc:mysql://127.0.0.1:3366/seata?useUnicode=true\033[32m successfully \033[0m
Set store.db.user=usench1\033[32m successfully \033[0m
Set store.db.password=112233\033[32m successfully \033[0m
Set store.db.min-conn=1\033[32m successfully \033[0m
Set store.db.max-conn=3\033[32m successfully \033[0m
Set store.db.global.table=global_table\033[32m successfully \033[0m
Set store.db.branch.table=branch_table\033[32m successfully \033[0m
Set store.db.query-limit=100\033[32m successfully \033[0m
Set store.db.lock-table=lock_table\033[32m successfully \033[0m
Set server.recovery.committing-retry-period=1000\033[32m successfully \033[0m
Set server.recovery.asyn-committing-retry-period=1000\033[32m successfully \033[0m
Set server.recovery.rollbacking-retry-period=1000\033[32m successfully \033[0m
Set server.recovery.timeout-retry-period=1000\033[32m successfully \033[0m
Set server.max.commit.retry.timeout=-1\033[32m successfully \033[0m
Set server.max.rollback.retry.timeout=-1\033[32m successfully \033[0m
Set client.undo.data.validation=true\033[32m successfully \033[0m
Set client.undo.log.serialization=jackson\033[32m successfully \033[0m
Set server.undo.log.save.days=7\033[32m successfully \033[0m
Set server.undo.log.delete.period=86400000\033[32m successfully \033[0m
Set client.undo.log.table=undo_log\033[32m successfully \033[0m
Set client.log.exceptionRate=100\033[32m successfully \033[0m
Set transport.serialization=seata\033[32m successfully \033[0m
Set transport.compressor=none\033[32m successfully \033[0m
Set metrics.enabled=false\033[32m successfully \033[0m
Set metrics.registry-type=compact\033[32m successfully \033[0m
Set metrics.exporter-list=prometheus\033[32m successfully \033[0m
Set metrics.exporter-prometheus-port=9898\033[32m successfully \033[0m
=========================================================================
 Complete initialization parameters, \033[32m total-count:64 \033[0m, \033[31m failure-count:0 \033[0m
=========================================================================
\033[32m Init nacos config finished, please start seata-server. \033[0m
usench1@usench-computer:~/workspace/my-study/seata/seata-server/bin$
  1. seata server 启动,执行seata-server.sh;
usench1@usench-computer:~/workspace/my-study/seata/seata-server/bin$ sh seata-server.sh -p 8091 -h 127.0.0.1 -m db
21:33:55,601 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
21:33:55,601 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
21:33:55,601 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/home/usench1/workspace/my-study/seata/seata-server/conf/logback.xml]
21:33:55,602 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs multiple times on the classpath.
21:33:55,602 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [file:/home/usench1/workspace/my-study/seata/seata-server/conf/logback.xml]
21:33:55,602 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [jar:file:/home/usench1/workspace/my-study/seata/seata-server/lib/seata-server-1.0.0.jar!/logback.xml]
21:33:55,672 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
21:33:55,679 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Will scan for changes in [file:/home/usench1/workspace/my-study/seata/seata-server/conf/logback.xml] 
21:33:55,679 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeTask scanning period to 1 minutes
21:33:55,684 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
21:33:55,688 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [stdout]
21:33:55,747 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
21:33:55,750 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [seata-default]
21:33:55,759 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@600746945 - Archive files will be limited to [2048 MB] each.
21:33:55,761 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@600746945 - No compression will be used
21:33:55,762 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@600746945 - Will use the pattern /home/usench1/logs/seata/seata-server.log.%d{yyyy-MM-dd}.%i for the active file
21:33:55,764 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5d5eef3d - The date pattern is 'yyyy-MM-dd' from file name pattern '/home/usench1/logs/seata/seata-server.log.%d{yyyy-MM-dd}.%i'.
21:33:55,764 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5d5eef3d - Roll-over at midnight.
21:33:55,767 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5d5eef3d - Setting initial period to Fri Jan 17 21:29:22 CST 2020
21:33:55,769 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@600746945 - Cleaning on start up
21:33:55,770 |-INFO in c.q.l.core.rolling.helper.TimeBasedArchiveRemover - first clean up after appender initialization
21:33:55,770 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
21:33:55,770 |-INFO in c.q.l.core.rolling.helper.TimeBasedArchiveRemover - Multiple periods, i.e. 32 periods, seem to have elapsed. This is expected at application start.
21:33:55,772 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[seata-default] - Active log file name: /home/usench1/logs/seata/seata-server.log
21:33:55,772 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[seata-default] - File property is set to [/home/usench1/logs/seata/seata-server.log]
21:33:55,773 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [io.seata.server.store.file.FileTransactionStoreManager] to false
21:33:55,773 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - io.seata.server.store.file.FileTransactionStoreManager level set to INFO
21:33:55,773 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [seata-default] to Logger[io.seata.server.store.file.FileTransactionStoreManager]
21:33:55,774 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
21:33:55,774 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [seata-default] to Logger[ROOT]
21:33:55,774 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [stdout] to Logger[ROOT]
21:33:55,774 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
21:33:55,775 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@56f4468b - Registering current configuration as safe fallback point

2020-01-17 21:33:55.883 INFO [main]io.seata.config.FileConfiguration.<init>:101 -The file name of the operation is registry.conf
2020-01-17 21:33:55.975 WARN [main]io.seata.config.ConfigurationFactory.<clinit>:68 -failed to load extConfiguration:not found service provider for : io.seata.config.ExtConfigurationProvider[null] and classloader : sun.misc.Launcher$AppClassLoader@27fa135a
io.seata.common.loader.EnhancedServiceNotFoundException: not found service provider for : io.seata.config.ExtConfigurationProvider[null] and classloader : sun.misc.Launcher$AppClassLoader@27fa135a
2020-01-17 21:33:55.989 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:236 -load ConfigurationProvider[Nacos] extension by class[io.seata.config.nacos.NacosConfigurationProvider]
2020-01-17 21:33:56.499 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:236 -load DataSourceGenerator[dbcp] extension by class[io.seata.server.store.db.DbcpDataSourceGenerator]
2020-01-17 21:33:57.454 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:236 -load LogStore[DB] extension by class[io.seata.core.store.db.LogStoreDataBaseDAO]
2020-01-17 21:33:57.455 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:236 -load TransactionStoreManager[DB] extension by class[io.seata.server.store.db.DatabaseTransactionStoreManager]
2020-01-17 21:33:57.455 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:236 -load SessionManager[DB] extension by class[io.seata.server.session.db.DataBaseSessionManager]
2020-01-17 21:33:58.960 INFO [main]io.seata.core.rpc.netty.AbstractRpcRemotingServer.start:155 -Server started ... 
2020-01-17 21:33:58.970 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:236 -load RegistryProvider[Nacos] extension by class[io.seata.discovery.registry.nacos.NacosRegistryProvider]

出现问题:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'seata.global_table' doesn't exist
解决: 到seata github 源码里:seata/script/server/db/mysql.sql,在seata 数据库中执行即可;

到此,seata server 与 nacos server 成功启动;

All 4 comments

registry.conf 中config的type=“nacos“改成type=”file“试试

这个问题我也遇到了,我用的是type="nacos",因此file.conf 这个配置文件是不起作用的(@jarvisqi );
简单写下我解决的步骤;
我的环境:
OS: ubuntu 18.04 LTS
JDK version: 1.8
nacos server version: nacos-server-1.1.4
seata server version:seata-server-1.0.0

  • 将nacos server 跑起来;
  • [ ] 进入 nacos conf 目录:
  1. 将cluster.conf.example 修改cluster.conf ,你安装了几个nacos (集群),这里就填nacos 所在机子ip; 我只有一个,所以填本机ip:

it is ip

example

192.168.1.150

  1. application.properties里添加以下几行数据库配置信息:

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3366/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=usench1
db.password=123456

  1. 执行nacos-mysql.sql,前提是先创建nacos_config 数据库;

  2. 执行bin 目录 下的startup.sh:

bash startup.sh   (centos 下,直接sh startup.sh )
usench1@usench-computer:~/workspace/my-study/seata/nacos-server/bin$ bash startup.sh 
/home/usench1/app/jdk/jdk1.8.0_181/bin/java  -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/usench1/workspace/my-study/seata/nacos-server/logs/java_heapdump.hprof -XX:-UseLargePages -Djava.ext.dirs=/home/usench1/app/jdk/jdk1.8.0_181/jre/lib/ext:/home/usench1/app/jdk/jdk1.8.0_181/lib/ext:/home/usench1/workspace/my-study/seata/nacos-server/plugins/cmdb:/home/usench1/workspace/my-study/seata/nacos-server/plugins/mysql -Xloggc:/home/usench1/workspace/my-study/seata/nacos-server/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dnacos.home=/home/usench1/workspace/my-study/seata/nacos-server -Dloader.path=/home/usench1/workspace/my-study/seata/nacos-server/plugins/health -jar /home/usench1/workspace/my-study/seata/nacos-server/target/nacos-server.jar  --spring.config.location=classpath:/,classpath:/config/,file:./,file:./config/,file:/home/usench1/workspace/my-study/seata/nacos-server/conf/ --logging.config=/home/usench1/workspace/my-study/seata/nacos-server/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with cluster
nacos is starting,you can check the /home/usench1/workspace/my-study/seata/nacos-server/logs/start.out
usench1@usench-computer:~/workspace/my-study/seata/nacos-server/bin$
  1. 访问nacos,http://127.0.0.1:8848/nacos/#/login ,用户名:nacos,密码:nacos,成功进入,至此,nacos server 就算是完成了;
  • 将seata server 跑起来

  • [ ] 进入seata conf 目录

  1. 将registry.conf 修改如下:
registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"

  nacos {
    serverAddr = "192.168.1.150"
    namespace = ""
    cluster = "default"
  }
}

config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos"

  nacos {
    serverAddr = "192.168.1.150"
    namespace = ""
  }
}

注意点:namespace 填 命名空间ID ,我的public 命名空间ID 是空;serverAddr 是nacos 机子ip;

  1. 将seata github 代码里的config.txt (seata/script/config-center/config.txt)下载下来,放到本地seata server 的bin 目录下,修改里面的数据库配置信息(store.db.* 相关);
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enable-client-batch-send-request=false
transport.thread-factory.boss-thread-prefix=NettyBoss
transport.thread-factory.worker-thread-prefix=NettyServerNIOWorker
transport.thread-factory.server-executor-thread-prefix=NettyServerBizHandler
transport.thread-factory.share-boss-worker=false
transport.thread-factory.client-selector-thread-prefix=NettyClientSelector
transport.thread-factory.client-selector-thread-size=1
transport.thread-factory.client-worker-thread-prefix=NettyClientWorkerThread
transport.thread-factory.boss-thread-size=1
transport.thread-factory.worker-thread-size=8
transport.shutdown.wait=3
service.vgroup_mapping.my_test_tx_group=default
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false
client.rm.async.commit.buffer.limit=10000
client.rm.lock.retry.internal=10
client.rm.lock.retry.times=30
client.rm.report.retry.count=5
client.rm.lock.retry.policy.branch-rollback-on-conflict=true
client.rm.table.meta.check.enable=false
client.rm.report.success.enable=true
client.tm.commit.retry.count=5
client.tm.rollback.retry.count=5
store.mode=db
store.file.dir=file_store/data
store.file.max-branch-session-size=16384
store.file.max-global-session-size=512
store.file.file-write-buffer-cache-size=16384
store.file.flush-disk-mode=async
store.file.session.reload.read_size=100
store.db.datasource=dbcp
store.db.db-type=mysql
store.db.driver-class-name=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3366/seata?useUnicode=true
store.db.user=usench1
store.db.password=123456
store.db.min-conn=1
store.db.max-conn=3
store.db.global.table=global_table
store.db.branch.table=branch_table
store.db.query-limit=100
store.db.lock-table=lock_table
server.recovery.committing-retry-period=1000
server.recovery.asyn-committing-retry-period=1000
server.recovery.rollbacking-retry-period=1000
server.recovery.timeout-retry-period=1000
server.max.commit.retry.timeout=-1
server.max.rollback.retry.timeout=-1
client.undo.data.validation=true
client.undo.log.serialization=jackson
server.undo.log.save.days=7
server.undo.log.delete.period=86400000
client.undo.log.table=undo_log
client.log.exceptionRate=100
transport.serialization=seata
transport.compressor=none
metrics.enabled=false
metrics.registry-type=compact
metrics.exporter-list=prometheus
metrics.exporter-prometheus-port=9898
  1. 在seata server 的bin 目录下创建nacos-config.sh,内容如下:
#!/usr/bin/env bash
# Copyright 1999-2019 Seata.io Group.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at、
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

while getopts ":h:p:" opt
do
  case $opt in
  h)
    host=$OPTARG
  ;;
  p)
    port=$OPTARG
  ;;
  ?)
  echo "\033[31m USAGE OPTION: $0 [-h host] [-p port] \033[0m"
  exit 1
  ;;
  esac
done

if [[ -z ${host} ]]; then
    host=localhost
fi
if [[ -z ${port} ]]; then
    port=8848
fi
nacosAddr=$host:$port
echo "set nacosAddr=$nacosAddr"
contentType="content-type:application/json;charset=UTF-8"

failCount=0
tempLog=$(mktemp -u)
function addConfig() {
curl -X POST -H "${1}" "http://$2/nacos/v1/cs/configs?dataId=$3&group=SEATA_GROUP&content=$4" >"${tempLog}" 2>/dev/null
  if [[ -z $(cat "${tempLog}") ]]; then
    echo "\033[31m Please check the cluster status. \033[0m"
    exit 1
  fi
 if [[ $(cat "${tempLog}") =~ "true" ]]; then
    echo "Set $3=$4\033[32m successfully \033[0m"
  else
    echo "Set $3=$4\033[31m failure \033[0m"
    (( failCount++ ))
  fi
}
count=0

echo $(dirname "$PWD")

shellPath=`cd $(dirname $0);pwd -P`

for line in $(cat $shellPath/config.txt); do
  (( count++ ))
  key=${line%%=*}
  value=${line#*=}
  #echo "${contentType}" "${nacosAddr}" "${key}" "${value}"
  addConfig "${contentType}" "${nacosAddr}" "${key}" "${value}"
done

echo "========================================================================="
echo " Complete initialization parameters, \033[32m total-count:$count \033[0m, \033[31m failure-count:$failCount \033[0m"
echo "========================================================================="
if [[ ${failCount} -eq 0 ]]; then
    echo "\033[32m Init nacos config finished, please start seata-server. \033[0m"
else
    echo "\033[31m init nacos config fail. \033[0m"
fi
  1. 执行nacos-conf.sh, 注:先保证nacos server 已启动成功;执行完脚本后,登录nacos web 就可以看见新添加的参数了(在public 空间);脚本是我修改过的,脚本默认是在public 空间里添加参数,如果想在自己创建的空间下添加配置呢?有知道的请告知,不过nacos web 里有个克隆按钮;
usench1@usench-computer:~/workspace/my-study/seata/seata-server/bin$ bash nacos-config.sh 127.0.0.1:8848
set nacosAddr=localhost:8848
/home/usench1/workspace/my-study/seata/seata-server
Set transport.type=TCP\033[32m successfully \033[0m
Set transport.server=NIO\033[32m successfully \033[0m
Set transport.heartbeat=true\033[32m successfully \033[0m
Set transport.enable-client-batch-send-request=false\033[32m successfully \033[0m
Set transport.thread-factory.boss-thread-prefix=NettyBoss\033[32m successfully \033[0m
Set transport.thread-factory.worker-thread-prefix=NettyServerNIOWorker\033[32m successfully \033[0m
Set transport.thread-factory.server-executor-thread-prefix=NettyServerBizHandler\033[32m successfully \033[0m
Set transport.thread-factory.share-boss-worker=false\033[32m successfully \033[0m
Set transport.thread-factory.client-selector-thread-prefix=NettyClientSelector\033[32m successfully \033[0m
Set transport.thread-factory.client-selector-thread-size=1\033[32m successfully \033[0m
Set transport.thread-factory.client-worker-thread-prefix=NettyClientWorkerThread\033[32m successfully \033[0m
Set transport.thread-factory.boss-thread-size=1\033[32m successfully \033[0m
Set transport.thread-factory.worker-thread-size=8\033[32m successfully \033[0m
Set transport.shutdown.wait=3\033[32m successfully \033[0m
Set service.vgroup_mapping.my_test_tx_group=default\033[32m successfully \033[0m
Set service.default.grouplist=127.0.0.1:8091\033[32m successfully \033[0m
Set service.enableDegrade=false\033[32m successfully \033[0m
Set service.disableGlobalTransaction=false\033[32m successfully \033[0m
Set client.rm.async.commit.buffer.limit=10000\033[32m successfully \033[0m
Set client.rm.lock.retry.internal=10\033[32m successfully \033[0m
Set client.rm.lock.retry.times=30\033[32m successfully \033[0m
Set client.rm.report.retry.count=5\033[32m successfully \033[0m
Set client.rm.lock.retry.policy.branch-rollback-on-conflict=true\033[32m successfully \033[0m
Set client.rm.table.meta.check.enable=false\033[32m successfully \033[0m
Set client.rm.report.success.enable=true\033[32m successfully \033[0m
Set client.tm.commit.retry.count=5\033[32m successfully \033[0m
Set client.tm.rollback.retry.count=5\033[32m successfully \033[0m
Set store.mode=db\033[32m successfully \033[0m
Set store.file.dir=file_store/data\033[32m successfully \033[0m
Set store.file.max-branch-session-size=16384\033[32m successfully \033[0m
Set store.file.max-global-session-size=512\033[32m successfully \033[0m
Set store.file.file-write-buffer-cache-size=16384\033[32m successfully \033[0m
Set store.file.flush-disk-mode=async\033[32m successfully \033[0m
Set store.file.session.reload.read_size=100\033[32m successfully \033[0m
Set store.db.datasource=dbcp\033[32m successfully \033[0m
Set store.db.db-type=mysql\033[32m successfully \033[0m
Set store.db.driver-class-name=com.mysql.jdbc.Driver\033[32m successfully \033[0m
Set store.db.url=jdbc:mysql://127.0.0.1:3366/seata?useUnicode=true\033[32m successfully \033[0m
Set store.db.user=usench1\033[32m successfully \033[0m
Set store.db.password=112233\033[32m successfully \033[0m
Set store.db.min-conn=1\033[32m successfully \033[0m
Set store.db.max-conn=3\033[32m successfully \033[0m
Set store.db.global.table=global_table\033[32m successfully \033[0m
Set store.db.branch.table=branch_table\033[32m successfully \033[0m
Set store.db.query-limit=100\033[32m successfully \033[0m
Set store.db.lock-table=lock_table\033[32m successfully \033[0m
Set server.recovery.committing-retry-period=1000\033[32m successfully \033[0m
Set server.recovery.asyn-committing-retry-period=1000\033[32m successfully \033[0m
Set server.recovery.rollbacking-retry-period=1000\033[32m successfully \033[0m
Set server.recovery.timeout-retry-period=1000\033[32m successfully \033[0m
Set server.max.commit.retry.timeout=-1\033[32m successfully \033[0m
Set server.max.rollback.retry.timeout=-1\033[32m successfully \033[0m
Set client.undo.data.validation=true\033[32m successfully \033[0m
Set client.undo.log.serialization=jackson\033[32m successfully \033[0m
Set server.undo.log.save.days=7\033[32m successfully \033[0m
Set server.undo.log.delete.period=86400000\033[32m successfully \033[0m
Set client.undo.log.table=undo_log\033[32m successfully \033[0m
Set client.log.exceptionRate=100\033[32m successfully \033[0m
Set transport.serialization=seata\033[32m successfully \033[0m
Set transport.compressor=none\033[32m successfully \033[0m
Set metrics.enabled=false\033[32m successfully \033[0m
Set metrics.registry-type=compact\033[32m successfully \033[0m
Set metrics.exporter-list=prometheus\033[32m successfully \033[0m
Set metrics.exporter-prometheus-port=9898\033[32m successfully \033[0m
=========================================================================
 Complete initialization parameters, \033[32m total-count:64 \033[0m, \033[31m failure-count:0 \033[0m
=========================================================================
\033[32m Init nacos config finished, please start seata-server. \033[0m
usench1@usench-computer:~/workspace/my-study/seata/seata-server/bin$
  1. seata server 启动,执行seata-server.sh;
usench1@usench-computer:~/workspace/my-study/seata/seata-server/bin$ sh seata-server.sh -p 8091 -h 127.0.0.1 -m db
21:33:55,601 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
21:33:55,601 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
21:33:55,601 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/home/usench1/workspace/my-study/seata/seata-server/conf/logback.xml]
21:33:55,602 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs multiple times on the classpath.
21:33:55,602 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [file:/home/usench1/workspace/my-study/seata/seata-server/conf/logback.xml]
21:33:55,602 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [jar:file:/home/usench1/workspace/my-study/seata/seata-server/lib/seata-server-1.0.0.jar!/logback.xml]
21:33:55,672 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
21:33:55,679 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Will scan for changes in [file:/home/usench1/workspace/my-study/seata/seata-server/conf/logback.xml] 
21:33:55,679 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeTask scanning period to 1 minutes
21:33:55,684 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
21:33:55,688 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [stdout]
21:33:55,747 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
21:33:55,750 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [seata-default]
21:33:55,759 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@600746945 - Archive files will be limited to [2048 MB] each.
21:33:55,761 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@600746945 - No compression will be used
21:33:55,762 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@600746945 - Will use the pattern /home/usench1/logs/seata/seata-server.log.%d{yyyy-MM-dd}.%i for the active file
21:33:55,764 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5d5eef3d - The date pattern is 'yyyy-MM-dd' from file name pattern '/home/usench1/logs/seata/seata-server.log.%d{yyyy-MM-dd}.%i'.
21:33:55,764 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5d5eef3d - Roll-over at midnight.
21:33:55,767 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5d5eef3d - Setting initial period to Fri Jan 17 21:29:22 CST 2020
21:33:55,769 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@600746945 - Cleaning on start up
21:33:55,770 |-INFO in c.q.l.core.rolling.helper.TimeBasedArchiveRemover - first clean up after appender initialization
21:33:55,770 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
21:33:55,770 |-INFO in c.q.l.core.rolling.helper.TimeBasedArchiveRemover - Multiple periods, i.e. 32 periods, seem to have elapsed. This is expected at application start.
21:33:55,772 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[seata-default] - Active log file name: /home/usench1/logs/seata/seata-server.log
21:33:55,772 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[seata-default] - File property is set to [/home/usench1/logs/seata/seata-server.log]
21:33:55,773 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [io.seata.server.store.file.FileTransactionStoreManager] to false
21:33:55,773 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - io.seata.server.store.file.FileTransactionStoreManager level set to INFO
21:33:55,773 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [seata-default] to Logger[io.seata.server.store.file.FileTransactionStoreManager]
21:33:55,774 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
21:33:55,774 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [seata-default] to Logger[ROOT]
21:33:55,774 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [stdout] to Logger[ROOT]
21:33:55,774 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
21:33:55,775 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@56f4468b - Registering current configuration as safe fallback point

2020-01-17 21:33:55.883 INFO [main]io.seata.config.FileConfiguration.<init>:101 -The file name of the operation is registry.conf
2020-01-17 21:33:55.975 WARN [main]io.seata.config.ConfigurationFactory.<clinit>:68 -failed to load extConfiguration:not found service provider for : io.seata.config.ExtConfigurationProvider[null] and classloader : sun.misc.Launcher$AppClassLoader@27fa135a
io.seata.common.loader.EnhancedServiceNotFoundException: not found service provider for : io.seata.config.ExtConfigurationProvider[null] and classloader : sun.misc.Launcher$AppClassLoader@27fa135a
2020-01-17 21:33:55.989 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:236 -load ConfigurationProvider[Nacos] extension by class[io.seata.config.nacos.NacosConfigurationProvider]
2020-01-17 21:33:56.499 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:236 -load DataSourceGenerator[dbcp] extension by class[io.seata.server.store.db.DbcpDataSourceGenerator]
2020-01-17 21:33:57.454 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:236 -load LogStore[DB] extension by class[io.seata.core.store.db.LogStoreDataBaseDAO]
2020-01-17 21:33:57.455 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:236 -load TransactionStoreManager[DB] extension by class[io.seata.server.store.db.DatabaseTransactionStoreManager]
2020-01-17 21:33:57.455 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:236 -load SessionManager[DB] extension by class[io.seata.server.session.db.DataBaseSessionManager]
2020-01-17 21:33:58.960 INFO [main]io.seata.core.rpc.netty.AbstractRpcRemotingServer.start:155 -Server started ... 
2020-01-17 21:33:58.970 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:236 -load RegistryProvider[Nacos] extension by class[io.seata.discovery.registry.nacos.NacosRegistryProvider]

出现问题:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'seata.global_table' doesn't exist
解决: 到seata github 源码里:seata/script/server/db/mysql.sql,在seata 数据库中执行即可;

到此,seata server 与 nacos server 成功启动;

@usench very patient and kind answer.
@jarvisqi have you solved the problem? The point is that there are "store.db.driver-class-name" configuration items in the nacos configuration center?

I will close this issue later. If still have question welcome to contact us again.

Was this page helpful?
0 / 5 - 0 ratings