V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
szvone
V2EX  ›  问与答

想请问各位大佬, springboot 是不是没办法做到用户自定义数据库账号密码?

  •  
  •   szvone · 2018-10-28 11:56:20 +08:00 · 3437 次点击
    这是一个创建于 1979 天前的主题,其中的信息可能已经有所发展或是发生改变。

    是不是只有在编译前在配置文件设定好数据的账号密码?

    能不能做到类似 php 那样,可以写完一个程序后有一个初始化的过程,用户可以在网页上面自定义数据库的账号密码,然后程序去改写数据库的配置?

    如果可以请问有没有类似的教程

    30 条回复    2018-10-29 15:32:44 +08:00
    limuyan44
        1
    limuyan44  
       2018-10-28 13:52:06 +08:00 via Android
    可以的,搜一搜配置中心关键字
    Cbdy
        2
    Cbdy  
       2018-10-28 14:09:10 +08:00 via Android
    可以的,最简单的,比如做一个数据源的代理
    ErrorMan
        3
    ErrorMan  
       2018-10-28 14:45:05 +08:00 via Android
    只是想对环境定制的话,Spring Boot 是可以在启动时从环境变量里读取配置。如果说想像 WordPress 那样在启动之后进行配置,可以用新配置生成一份新的配置文件,然后重启程序让 Spring Boot 以新的配置文件初始化
    szvone
        4
    szvone  
    OP
       2018-10-28 15:33:06 +08:00
    @Cbdy 不是很懂,有这方面的资料吗?
    szvone
        5
    szvone  
    OP
       2018-10-28 15:33:59 +08:00
    @ErrorMan 嗯这个我懂,大概就是生成一份配置文件来替换原有的,但是问题来了,springboot 打包后的是.war 的包,这种要怎么去替换原有的配置文件呢?
    szvone
        6
    szvone  
    OP
       2018-10-28 15:36:39 +08:00
    @limuyan44 可能您理解错我的意思了,您可以看三楼的回复,我是想要做一个,程序启动后,能够让用户自定义配置的程序,就比如我发布一个 war 包,用户只需要运行这个 war 包,就能够在网页里面配置数据库的账号密码,给任何一个用户都能用,而无需我用源码根据不同的用户的数据库密码编译对应的 war 包给他们用
    aa6563679
        7
    aa6563679  
       2018-10-28 15:48:02 +08:00 via iPhone
    @szvone 你打成 jar 包,然后把配置文件放到和 jar 包一个目录也能用的,不一定要打进 jar 包里。
    在网页里配置站号密码也能用这个方法做。写个配置到当前目录就行了。只是 Java 没有这习惯,没有现成的轮子
    lhx2008
        8
    lhx2008  
       2018-10-28 15:51:40 +08:00
    和 jar 包同目录的 config/property.conf 啥的优先级是比 jar 包里面的 conf 大的,所以你的安装程序在这里重建一个 conf 重启就 OK,至于有没有热部署就不太清楚了。或者楼主可以参考下有没有别人写的 Java 论坛博客怎么安装的
    slixurd
        9
    slixurd  
       2018-10-28 15:55:27 +08:00
    那就不要用 XML/Annotation 配置数据库连接
    自己起个 Service 动态创建连接就好了,这个事情还是挺简单的吧
    看看数据库是怎么创建的就好了...
    szvone
        10
    szvone  
    OP
       2018-10-28 19:45:56 +08:00
    @slixurd 自己创建的话 还有个问题就是每次服务器重启配置会丢失
    szvone
        11
    szvone  
    OP
       2018-10-28 19:46:49 +08:00
    @lhx2008 感谢解答,想请问的是 springboot 默认支持这种配置模式吗?
    szvone
        12
    szvone  
    OP
       2018-10-28 19:48:05 +08:00
    @aa6563679 我目前就是尝试了用 txt 来保存,然后动态读取,想知道有没有更好的办法,比如去修改 yml 文件
    serical
        13
    serical  
       2018-10-28 20:09:18 +08:00 via Android
    yml 没试过,不过 properties 是可以的,有个 ResourseBundle 搜下
    ErrorMan
        14
    ErrorMan  
       2018-10-28 20:42:56 +08:00 via Android
    @szvone war 包不太清楚,jar 包可以使用启动参数来指定配置文件位置,或者楼上提到的配置优先级,war 部署以后会被解压,应该也支持吧。实在不行就自己写个配置类来读取新配置然后提交给 SpringBoot 容器。部署方面 Spring 的官方教程这方面介绍得很详细可以去看看
    johnniang
        15
    johnniang  
       2018-10-28 21:59:12 +08:00 via Android
    启动的时候加上参数不就行了么 -Dspring.datasource...
    nosky
        16
    nosky  
       2018-10-29 08:25:25 +08:00 via Android
    建议参考一下 halo,一个 JAVA 开发的博客系统
    AlkTTT
        17
    AlkTTT  
       2018-10-29 08:31:21 +08:00
    SpringCloud Config
    szvone
        18
    szvone  
    OP
       2018-10-29 09:11:21 +08:00
    @serical 百度了一下看到了资料,这个好像只能读取配置,但是不能修改
    szvone
        19
    szvone  
    OP
       2018-10-29 09:11:47 +08:00
    @ErrorMan 如果是通过 java -jar 的方式启动,这个包是不会解压的
    szvone
        20
    szvone  
    OP
       2018-10-29 09:12:24 +08:00
    @johnniang 知道端口号可以自定义启动配置,数据源也可以吗?
    szvone
        21
    szvone  
    OP
       2018-10-29 09:12:58 +08:00
    @AlkTTT 这个请参照我 6 楼的回复
    johnniang
        22
    johnniang  
       2018-10-29 09:13:36 +08:00 via Android
    @szvone 都可以的,配置文件里面任何配置都是可以通过命令参数覆盖的
    johnniang
        23
    johnniang  
       2018-10-29 09:14:23 +08:00 via Android
    @szvone 实际上就是添加环境变量而已
    szvone
        24
    szvone  
    OP
       2018-10-29 09:17:22 +08:00
    @nosky 查询了下源代码,他是使用了一个 H2 Database:嵌入式数据库,无需安装,是内置了数据库,并不是自定义了数据库
    fumichael
        25
    fumichael  
       2018-10-29 09:17:34 +08:00
    打开 jar 包找到配置文件修改完再丢回去 jar 包的意思?或者你可以打成 war 包~~
    szvone
        26
    szvone  
    OP
       2018-10-29 09:23:05 +08:00
    @fumichael 就是现在 php 写的那种博客系统不是可以实现安装吗?首次进入的时候,会让用户填写数据库的账号密码等进行初始化,他原理就是有个 config 的文件,用户初始化的时候,程序会去修改这个文件,我想说的是 java 能不能实现类型的功能,我打包成 war 了 使用内置 Tomcat 运行的话,还是不会解压的
    UndefinedDiary
        27
    UndefinedDiary  
       2018-10-29 09:31:49 +08:00
    我印象中 jira 是启动的时候页面配置数据库,,, 后面重启升级都是 OK 的,,应该跟楼主需求类似,,不知道有没有参考价值
    gaius
        28
    gaius  
       2018-10-29 09:37:11 +08:00
    gradle 可以写个 task,复制某路径下的*.properties 和*.xml 到 build 下的路径,可以替换 war 包的配置文件
    fumichael
        29
    fumichael  
       2018-10-29 09:39:28 +08:00
    @szvone 看来是我理解错你的意思了,应该是可行的,只是我也没想到怎么做
    ErrorMan
        30
    ErrorMan  
       2018-10-29 15:32:44 +08:00 via Android
    @szvone 呃,你不是用 war 方式部署的吗,war 方式会解压啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5229 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 09:14 · PVG 17:14 · LAX 02:14 · JFK 05:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.