docker-compose安装nacos配置MySQL数据源8.0以上版本报java.lang.IllegalStateException: No DataSource set

文章目录

  • 最初docker-compose.yml配置
  • 最初application.properties配置
  • 过程
  • 解决方案(原理是一样的)
    • 修改application.properties文件
    • 修改docker-compose.yml文件
  • 如果提示账号密码不正确的话我目前的解决方式是如下
  • 2022-05-06补充
    • 评论区反馈后我就配置一个yml文件成功启动8.0的配置

Caused by: java.lang.IllegalStateException: No DataSource set
at org.springframework.util.Assert.state(Assert.java:73)
at org.springframework.jdbc.support.JdbcAccessor.obtainDataSource(JdbcAccessor.java:77)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:371)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:452)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:462)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:473)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:480)
at com.alibaba.nacos.config.server.service.repository.extrnal.ExternalStoragePersistServiceImpl.findConfigMaxId(ExternalStoragePersistServiceImpl.java:658)
at com.alibaba.nacos.config.server.service.dump.processor.DumpAllProcessor.process(DumpAllProcessor.java:51)
at com.alibaba.nacos.config.server.service.dump.DumpService.dumpConfigInfo(DumpService.java:293)
at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:205)
… 61 common frames omitted

最初docker-compose.yml配置

首先按照网上大多数的单机启动教程我配置的docker-compose.yml如下,需要的可以酌情修改

version: '3'
services:
  nacos:
    image: nacos/nacos-server:latest                             # 镜像`nacos/nacos-server:latest`
    #  mem_limit: 400m                                              # 最大使用内存
    container_name: nacos_docker                                 # 容器名为'nacos_docker'
    restart: always                                              # 指定容器退出后的重启策略为始终重启
    volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
      - ./nacos/standalone-logs/:/home/nacos/logs
      - ./nacos/plugins/:/home/nacos/plugins
      - ./nacos/conf/application.properties:/home/nacos/conf/application.properties
    environment: # 设置环境变量,相当于docker run命令中的-e
      - PREFER_HOST_MODE=hostname               # 如果支持主机名可以使用hostname,否则使用ip,默认也是ip
      - MODE=standalone                         # 单机模式启动
      # - SPRING_DATASOURCE_PLATFORM=mysql        # 数据源平台 仅支持mysql或不保存empty
      # - MYSQL_SERVICE_HOST=*ip*     # 注:这里不能为`127.0.0.1`或`localhost`方式!!!
      # - MYSQL_SERVICE_DB_NAME=nacos_config      # 所需sql脚本位于`https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql`
      # - MYSQL_SERVICE_PORT=3306
      # - MYSQL_SERVICE_USER=*user*
      # - MYSQL_SERVICE_PASSWORD=*password*
      # JVM调优参数
      - JVM_XMS=128m   #-Xms default :2g
      - JVM_XMX=128m   #-Xmx default :2g
      - JVM_XMN=32m   #-Xmn default :1g
      - JVM_MS=16m     #-XX:MetaspaceSize default :128m
      - JVM_MMS=16m    #-XX:MaxMetaspaceSize default :320m
      - NACOS_DEBUG=n  #是否开启远程debug,y/n,默认n
      - TOMCAT_ACCESSLOG_ENABLED=false #是否开始tomcat访问日志的记录,默认false
    ports: # 映射端口
      - 8848:8848

最初application.properties配置

application.properties文件

  #*************** Config Module Related Configurations ***************#
  ### If use MySQL as datasource:
  ### 解开当前配置,指定类型为MySQL
  spring.datasource.platform=mysql

  ### Count of DB:
  ### 你的数据库有几个实例这里就指定几
  db.num=1

  ### Connect URL of DB:
  ### 解开这个配置,可以配置多个数据源信息
  db.url.0=jdbc:mysql://*.*.*.*.*:3306/nacos_config?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
  db.user.0=root
  db.password.0=*******

过程

回到xshell cd到 docker-compose.yml目录执行

docker-compose --compatibility up -d

等待了一会儿查看启动日志拉到最后

docker logs nacos_docker

docker-compose安装nacos配置MySQL数据源8.0以上版本报java.lang.IllegalStateException: No DataSource set_第1张图片
不废话直接复制百度一下,知道了导致问题的原因是nacos内置的驱动版本太低,试过了很多文章种的方法都不行,什么把mysql-connector-java-xxx.jar放在哪个目录等等,最后自己摸索了一下在不改原有nacosjar包的基础下直接拉最新版本nacos/nacos-server:latest,该配置才是最轻松的嘛,修改pom.xml太麻烦了
Nacos Docker官方文档是有支持MySQL8的
在这里插入图片描述
去github找到example/standalone-mysql-8.yaml这个文件

version: "2"
services:
  nacos:
    image: nacos/nacos-server:${NACOS_VERSION}
    container_name: nacos-standalone-mysql
    env_file:
      - ../env/nacos-standlone-mysql.env
    volumes:
      - ./standalone-logs/:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9555:9555"
    depends_on:
      - mysql
    restart: always
  mysql:
    container_name: mysql
    image: nacos/nacos-mysql:8.0.16
    env_file:
      - ../env/mysql.env
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - "3306:3306"

发现其实和我上面贴出的配置文件差不多
多了一个env_file:- …/env/nacos-standlone-mysql.env如下

PREFER_HOST_MODE=hostname
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=mysql
MYSQL_SERVICE_DB_NAME=nacos_devtest
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=nacos
MYSQL_SERVICE_PASSWORD=nacos
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false

仔细查看不就是我的docker-compose.yml文件里面的environment环境变量嘛,对比之后发现我没有下面一列

MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false

直接把上面代码放在environment里面是不行的,我都注释了那么大一块儿了仔细看看之后发现上面的只有一个参数是我没配置过的useSSL=false

解决方案(原理是一样的)

修改application.properties文件

在db.url.0最后加了一个useSSL=false

  #*************** Config Module Related Configurations ***************#
  ### If use MySQL as datasource:
  ### 解开当前配置,指定类型为MySQL
  spring.datasource.platform=mysql

  ### Count of DB:
  ### 你的数据库有几个实例这里就指定几
  db.num=1

  ### Connect URL of DB:
  ### 解开这个配置,可以配置多个数据源信息
  db.url.0=jdbc:mysql://*.*.*.*:3306/nacos_config?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=false
  db.user.0=root
  db.password.0=********

重启自己的容器等待一下查看日志

docker restart nacos_docker
docker logs nacos_docker   

直接看最后一行,如果是completed就皆大欢喜了
docker-compose安装nacos配置MySQL数据源8.0以上版本报java.lang.IllegalStateException: No DataSource set_第2张图片
访问ip:8848/nacos默认账号/密码nacos/nacos成功
docker-compose安装nacos配置MySQL数据源8.0以上版本报java.lang.IllegalStateException: No DataSource set_第3张图片

修改docker-compose.yml文件

新建一个.env文件,内容直接copygithub里面的
和配置里volumes:同级添加参数

 env_file:
      #你自己的.env文件路径,这里我是和application.properties同级存放
      - ./nacos/conf/nacos-standlone-mysql.env

docker-compose安装nacos配置MySQL数据源8.0以上版本报java.lang.IllegalStateException: No DataSource set_第4张图片
执行就完事儿了

docker-compose --compatibility up -d

如果提示账号密码不正确的话我目前的解决方式是如下

docker stop nacos_docker
docker restart nacos_docker

成功进入
docker-compose安装nacos配置MySQL数据源8.0以上版本报java.lang.IllegalStateException: No DataSource set_第5张图片

2022-05-06补充

评论区反馈后我就配置一个yml文件成功启动8.0的配置

#########################################NACOS#######################################

nacos:
    image: nacos/nacos-server:latest                             # 镜像`nacos/nacos-server:latest`
    #  mem_limit: 400m                                              # 最大使用内存
    container_name: nacos_docker                                 # 容器名为'nacos_docker'
    restart: always                                              # 指定容器退出后的重启策略为始终重启
    volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
      - ./nacos/standalone-logs/:/home/nacos/logs
      - ./nacos/plugins/:/home/nacos/plugins
      # - ./nacos/conf/application.properties:/home/nacos/conf/application.properties
    # env_file:
    #   - ./nacos/conf/nacos-standlone-mysql.env       #你自己的.env文件路径,和application.properties同级存放
    environment: # 设置环境变量,相当于docker run命令中的-e
      # - PREFER_HOST_MODE=ip               # 如果支持主机名可以使用hostname,否则使用ip,默认也是ip
      - MODE=standalone                         # 单机模式启动
      - SPRING_DATASOURCE_PLATFORM=mysql        # 数据源平台 仅支持mysql或不保存empty
      - MYSQL_SERVICE_HOST= *.*.*.*      # 注:这里不能为`127.0.0.1`或`localhost`方式!!!
      - MYSQL_SERVICE_DB_NAME=nacos_config      # 所需sql脚本位于 `nacos-mysql/nacos-mysql.sql`
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=********
      # JVM大小参数
      - JVM_XMS=128m   #-Xms default :2g
      - JVM_XMX=128m   #-Xmx default :2g
      - JVM_XMN=32m   #-Xmn default :1g
      - JVM_MS=16m     #-XX:MetaspaceSize default :128m
      - JVM_MMS=16m    #-XX:MaxMetaspaceSize default :320m
      - NACOS_DEBUG=n  #是否开启远程debug,y/n,默认n
      - TOMCAT_ACCESSLOG_ENABLED=false #是否开始tomcat访问日志的记录,默认false
    # depends_on:
      # - mysql-db
    ports: # 映射端口
      - 8848:8848

你可能感兴趣的:(docker,docker,java,微服务,github,linux)