想请问各位大佬, springboot 是不是没办法做到用户自定义数据库账号密码? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
szvone
V2EX    问与答

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

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

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

    能不能做到类似 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     Solana     881 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 22:38 PVG 06:38 LAX 15:38 JFK 18:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86