全部产品

Linux下Tomcat+Java+Sqlserver接入实践

更新时间:2019-04-19 00:12:13

本章介绍如何在Linux 系统下使用Tomcate+Java+Sqlserver对托管应用进行部署

准备工作

  1. 安装Docker环境。
    您可以直接访问Docker官网获取更多信息。

    • Linux客户端安装:目前在Linux系统上安装Docker,对系统版本有以下要求:
      1. CentOS7
      2. Debian7.7(Wheezy LTS)、8.0(Jessie LTS)、9(Stretch)
      3. Fedora2425
      4. Ubuntu16.04(Xenial LTS)、14.04(Trusty LTS)、17.04(Zesty)
      5. 您可以通过阿里云的Docker CE 镜像源站进行安装。
  2. 打包自研节点镜像。

    • 编写dockefile文件
      1. # step 1: 以ubuntu:16.04作为基础镜像
      2. FROM ubuntu:16.04
      3. # step 2: 安装jdk8
      4. RUN apt-get update && apt-get install -y openjdk-8-jdk
      5. # step 3: 安装sqlcmd环境
      6. RUN apt-get update && apt-get install -y \
      7. curl apt-transport-https debconf-utils \
      8. && rm -rf /var/lib/apt/lists/*
      9. RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
      10. RUN curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      11. RUN apt-get update && ACCEPT_EULA=Y apt-get install -y msodbcsql mssql-tools
      12. RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
      13. RUN /bin/bash -c "source ~/.bashrc"
      14. # step 4:安装中文显示环境,在终端操作时,确保能正确的显示中文内容
      15. RUN apt-get update && apt-get install -y locales
      16. ENV LANG C.UTF-8
      17. # step 5: 因sqlcmd限制,需要配置终端环境使用en_US.UTF-8
      18. RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && locale-gen
      19. # step 6: 复制自有应用
      20. COPY test.jar /test.jar
      21. ENTRYPOINT ["/bin/bash","-c","java -jar /test.jar --server.port=8081"]
    • 将需要部署的应用jar包放在Dockerfile文件同一个目录下。
    • 执行命令进行镜像构建: docker build -t javademo:v1 .
      :javademo为镜像名称,v1为镜像版本号。执行命令查看镜像:docker images
  3. 打包初始化节点镜像

    • 编写dockefile文件
      1. # step 1: 以ubuntu:16.04作为基础镜像
      2. FROM ubuntu:16.04
      3. # step 2: 安装sqlcmd
      4. RUN apt-get update && apt-get install -y \
      5. curl apt-transport-https debconf-utils \
      6. && rm -rf /var/lib/apt/lists/*
      7. RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
      8. RUN curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      9. RUN apt-get update && ACCEPT_EULA=Y apt-get install -y msodbcsql mssql-tools
      10. # step 3: 设置sqlcmd的path
      11. RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
      12. RUN /bin/bash -c "source ~/.bashrc"
      13. # step 4: 安装中文显示环境,在终端操作时,确保能正确的显示中文内容
      14. RUN apt-get update && apt-get install -y locales
      15. ENV LANG C.UTF-8
      16. # step 5: 因sqlcmd限制,需要配置终端环境使用en_US.UTF-8
      17. RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && locale-gen
      18. # step 6: copy数据库脚本
      19. COPY db.sql /db.sql
      20. COPY init.sh /init.sh
      21. RUN chmod +x /init.sh
      22. ENTRYPOINT ["/bin/bash", "/init.sh"]
    • 将需要部署的db.sql与init.sh放在Dockerfile文件同一个目录下。
    • 执行命令进行镜像构建: docker build -t javademo:v2 .
      :javademo为镜像名称,v2为镜像版本号。执行命令查看镜像:docker images
  4. 创建数据库初始化的sql文件。

    1. /******************************************/
    2. /* 创建user数据表,并插入两条初始化数据 */
    3. /******************************************/
    4. CREATE DATABASE demoDB
    5. GO
    6. CREATE TABLE [demoDB].[dbo].[user]
    7. (
    8. [id] bigint NOT NULL ,
    9. [gmt_create] datetime NOT NULL ,
    10. [gmt_modified] datetime NOT NULL ,
    11. [name] nvarchar(50) NOT NULL ,
    12. [phone] nvarchar(50) NOT NULL
    13. )
    14. ON [PRIMARY]
    15. GO
    16. ALTER TABLE [demoDB].[dbo].[user] ADD CONSTRAINT [PK_user] PRIMARY KEY CLUSTERED
    17. (
    18. [id]
    19. )
    20. WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    21. GO
    22. INSERT INTO [demoDB].[dbo].[user] (id, gmt_create, gmt_modified, name, phone) VALUES ('1', '2018-11-26 10:00:00', '2018-11-26 10:00:00', N'测试', N'1388888888');
    23. INSERT INTO [demoDB].[dbo].[user] (id, gmt_create, gmt_modified, name, phone) VALUES ('2', '2018-11-26 10:00:00', '2018-11-26 10:00:00', N'test', N'1366666666');
    24. GO

    5.创建用于容器初始化的运行脚本init.sh。

    1. #!/bin/bash --login
    2. function prop() {
    3. env|grep "${1}"|cut -d'=' -f2
    4. }
    5. #从容器中的环境变量获取SQLServer访问参数
    6. USER=$(prop 'iot\.hosting\.testdb\.mssqlUser')
    7. PASSWORD=$(prop 'iot\.hosting\.testdb\.mssqlPassword')
    8. HOSTNAME_FULL=$(prop 'iot\.hosting\.testdb\.mssqlUrl')
    9. HOSTNAME_TEMP=${HOSTNAME_FULL#jdbc:sqlserver://}
    10. HOSTNAME=${HOSTNAME_TEMP%:*}",1433"
    11. #使用数据库初始化sql文件初始化数据库
    12. /opt/mssql-tools/bin/sqlcmd -S ${HOSTNAME} -U ${USER} -P ${PASSWORD} -i db.sql -o db_execution.log

    6.测试的Demo地址为:Tomcat+Java+MySQL

操作步骤

  1. 登录物联网平台控制台
  2. 在左侧导航栏选择应用托管>镜像管理。将打包完成的镜像文件上传至阿里云,具体操作您可以参照镜像仓库
  3. 在左侧导栏选择应用托管>应用配置。具体操作您可以参照应用配置
    image.png
    在应用配置中拉入初始化节点,并选择该镜像。当节点部署时,与其相连接的节点的输出属性,会注入该初始化节点的环境变量中,方便初始化节点访问。
    image.png
    脚本中SQL Server访问信息对应的环境变量中动态内容,需要与init.sh部署节点的设置保持一致,testdb为节点配置中的服务名称,同时SQL Server节点输出的数据都将放在自研节点的环境变量中。
    image.png
  4. 在左侧导航栏选择应用托管>应用管理
  5. 在配置名称的右侧,单击管理,进入应用管理页面,在节点列表中可查看部署的所有节点状态,单击外部端口,将进入到您部署的应用中。
    image.png