精华内容
下载资源
问答
  • easyUI+ssh+shiro技术实现的开源权限管理系统

    千次下载 热门讨论 2014-07-05 00:49:55
    easyUI+ssh+shiro技术实现的开源权限管理系统sshpermissions,另外还有SpringMVC Spring3 Hibernate3 MyBatis重构的另外一个版本sshpermissions
  • 如何实现从技术人员项目经理的转变  这不是一个什么新鲜话题,但是却是一个永远存在、永远值得研究与探讨的问题。结合前辈们的观点,谈谈我的看法。  几年前考取了软件项目管理师,也通过了单位的项目经理资质...

    如何实现从技术人员到项目经理的转变

           这不是一个什么新鲜话题,但是却是一个永远存在、永远值得研究与探讨的问题。结合前辈们的观点,谈谈我的看法。

           几年前考取了软件项目管理师,也通过了单位的项目经理资质考试,同时单位也明确指出以后项目经理要搞竞聘制,不再由领导直接指定。当时想着,我们组项目很少,又有资历比较老的同事,来了项目我也要靠边站,姑且等着吧。从此也就不谈项目经理、不谈项目管理,专注于新需求开发、技术攻关等。

           最近来了一个项目,只有一个有项目经理资质的同事报名,这个是不符合单位竞聘条件的。于是领导安排我们一干人等抓紧填表报名。

           表格已经上交,就等着选聘呢,估计也就这几天的事情了。我在仔细阅读了项目可行研究报告、项目需求说明书后,感觉对项目本身有了一个认识,明白了这个项目要做什么和为什么去做,对于如何去做虽然不是这个阶段考虑的,但心里也有了一个谱。对于自己承担这个项目的优势也分析了一番,对于评委可能问到的问题也进行了假设,突然间想到一个可能被问及的重要问题,如何实现一个技术人员到项目经理的转变呢?

          抛开书本上的标准答案,我想根据自己对项目经理的认识谈一下看法。

    首先,心态的转变,从省心型劳心型。做开发做了5年了,说实话也算小油条了,知道怎么样才能做同样的事收到更好的效果,或者说知道怎么偷懒了。不谈专职的运维人员,就技术人员来说,就是在规定的时间内,高质量的完成项目经理或技术经理分配的模块。从这句话,我们就知道技术人员怎么省心了,有人给安排时间、有人给分配任务,当然中间还可能有人催和赶。

          同样的问题和场景,换位思考,你就知道项目经理如何劳心了。项目经理要承担起管家婆的责任,家里有多少米、有多少张嘴、客人来了怎么办等等都要有个盘算。首先要订很多计划,如项目总体计划、项目实施计划、项目测试计划、项目投产计划等等,而且还要组织去评审这些计划;然后就该给我们省心的技术人员分配任务了,也就是书本上讲的WBS(工作分解结构),这个步骤也可以安排技术经理开展;很重要的一点是,项目经理要对开发进度负责,进度慢了,领导不答应、客户不答应,没办法,你就去催技术人员吧,实在不行就求求技术人员加班吧。

          其次,思路的转变,从专注于事专注于人。技术人员专注于事,指的是不用考虑或者很少考虑事之外的,只要把事弄清楚、搞明白、做好即可。项目经理则不必和技术人员一样清楚事本身,你只要能安排合适的人去把这件事弄清楚、搞明白、做好即可。注意,其中这个“合适的人”,选择好合适的人去做合适的事情可不是什么简单的问题。首先,你要清楚自己团队成员的特点,有做事快且好的、有做事谨慎小心的、有做事毛糙的、有不爱做事的等等,心里都要有一个分类,但千万不要说出来。对于做事快且好的(没准将来也跟你一样承担项目经理的角色),不要分配过多的活,可让其承担技术经理或者组内专家的角色,紧急且重要的事情,优先分配给这类人;对于一些重要但不紧急的事情就给做事谨慎小心的人去做吧;做事毛糙的,你也不能不分配任务,分配一些常规开发任务,开发的不好能马上看出来的那种……

           暂时就想到这些,先写到这里,以后想到了再补充。

           以上仅代表个人观点,如有不同,欢迎交流。

    展开全文
  • 目录 注:主要只做理论性的总结与分析,相关实战代码会在后面的博客中和github中逐步增加。 一、配置中心的由来及选择 (一)配置中心由来 ...二、Spring Cloud Config概述及基本实现方法介绍 三、Spring Clo...

    目录

    注:主要只做理论性的总结与分析,相关实战代码会在后面的博客中和github中逐步增加。

    一、配置中心的由来及选择

    (一)配置中心由来

    (二)配置中心要求具备的功能

    (三)配置中心基本流转图和支撑体系分析                       ​

    (四)多种配置中心的选择与对比方案

    二、Spring Cloud Config概述及基本实现方法介绍

    三、Spring Cloud Config结合Git实现配置中心方案

    (一)Git版基本工作原理(未加Spring Cloud Bus热刷新)

    (二)Git多种配置信息讲解

    (三)基本的手动刷新和结合Spring Cloud Bus热刷新

    四、Spring Cloud Config结合关系型数据库MYSQL实现配置中心方案

    (一)基本实现原理

    (二)基本要求讲解

    五、Spring Cloud Config结合非关系性数据库MongoDB实现配置中心方案

    (一)基本实现原理

    (二)基本要求讲解

    六、Spring Cloud Config使用技能及功能扩展

    (一)基本实用技能:本地参数覆盖远程参数

    (二)客户端自动刷新实现

    (三)客户端回退功能实现

    (四)客户端安全认证机制JWT实现

    七、Spring Cloud Config实现客户端及服务端高可用方案

    (一)客户端高可用原理及方案

    (二)服务端高可用原理及方案

    八、Spring Cloud Config与Apollo配置使用实现界面化操作

    (一)Apollo基本概述及基本功能介绍

    (二)Apollo总体架构模块分析

    (三)Apollo客户端设计与运行环境介绍

    参考书籍、文献和资料:


    注:主要只做理论性的总结与分析,相关实战代码会在后面的博客中和github中逐步增加。

    一、配置中心的由来及选择

    (一)配置中心由来

    互联网时代下的分布式系统,应用部署在N台服务器上或在云化环境以多实例呈现,如果一个实例一个实例(或一台服务器一台服务器)进行修改配置和重启,一是维护成本极高,二是不现实,配置中心的思想便应运而生。配置中心用作集中管理不同环境和不同集群配置,以及在修改配置后实时动态推送到应用动态更新。

    配置中心管理作为微服务六大实现技术之一,从模型上来分析,包括4大分类、4个核心需求和2个维度分析,在分布式下配置中心在实现上需要满足3大需求:高效获取、实时感知、分布式访问。基本理论在之前博客中已经讲解过,具体见以下博客链接:https://blog.csdn.net/xiaofeng10330111/article/details/85682513

    (二)配置中心要求具备的功能

    配置中心应该剧本具备以下基本功能,具体如图:

    这里只展示了基本的实现功能,从功能特性、技术路线、可用性和易用性方面还有更多的功能要求,具体可以见(四)以及对应的配置中心实现方案对比。

    (三)配置中心基本流转图和支撑体系分析

    具体可如图所示:

            

    (四)多种配置中心的选择与对比方案

    具体对比分类具体对比项重要程度Spring Cloud ConfigNetflix ArchaiusCtrip ApolloDisConf
    功能特性静态配置管理基于file支持支持
    动态配置管理支持支持支持支持
    统一管理无,需要git、数据库等支持支持
    多维度管理无,需要git、数据库等支持支持
    变更管理无,需要git、数据库等
    本地配置缓存支持支持
    配置更新策略
    配置锁支持不支持不支持不支持
    配置校验
    配置生效时间重启生效,手动刷新手动刷新生效实时实时
    配置更新推送需要手动触发需要手动触发支持支持
    配置定时拉取支持配置更新目前依赖事件驱动,client重启或server推送操作
    用户权限管理无,需要git、数据库等支持支持
    授权、审核、审计无,需要git、数据库等界面直接提供发布历史和回滚按钮操作记录有赖数据库,但无查询接口
    配置版本管理git支持无,需要git、数据库等
    配置合规检测不支持不支持支持(还需完善) 
    实例配置监控需要结合Spring Admin不支持支持支持,可以查看每个配置在哪台机器上加载
    灰度发布不支持不支持支持不支持部分更新
    告警通知不支持不支持支持邮件方式告警支持邮件方式告警
    统计报表不支持不支持不支持不支持
    依赖关系不支持不支持不支持不支持
    技术路线支持Spring Boot原生支持支持与Spring Boot无关
    支持Spring Config原生支持支持与Spring Cloud无关
    客户端支持javajavajava、.netjava
    业务系统入侵性入侵性弱入侵性弱入侵性弱入侵性弱,支持注解和xml
    可依赖组件    
    可用性单点故障(SPOF)支持HA部署支持HA部署支持HA部署支持HA部署,高可用由ZK提供
    多数据中心部署支持支持支持支持
    配置获取性能unkownunkownunkownunkown
    易用性配置界面无,需要git、数据库等操作统一界面统一界面

    结论:

    • 从整体上来看的话,携程的Apollo性能及各方面相对于其他配置中心而言是最好的,因为其支持pring Boot和Spring Config,所以在微服务架构中建议最好采用Apollo来作为配置中心;
    • Spring Cloud Config相对Apollo性能与支持没有很全面,但是可以采用一定的开源技术及现有技术进行改善加之原生支持pring Boot和Spring Config,在微服务架构中也是强烈建议采用的方案;
    • 其他两种方案在微服务架构中不建议采用,在此不做分析。

    我们主要对Spring Cloud Config进行分析和理解,Apollo做辅助分析,关于Apollo的相关知识有时间在进行学习和分享。

    二、Spring Cloud Config概述及基本实现方法介绍

    Spring Cloud Config是Spring Cloud微服务体系中的配置中心,是一个集中化外部配置的分布式系统,由服务端和客户端组成,其不依赖于注册中心,是一个独立的配置中心,支持多种存储配置信息形式,目前主要有jdbc、value、native、svn、git,其中默认是git。重点讨论功能有如下两个方面:

    • 将程序中配置的各种功能开关、参数配置、服务器地址------>修改后实时生效
    • 灰度发布、分环境、分集群管理配置--------->全面集中化管理

    因为采用native方式必然决定了每次配置完相关文件后一定要重启Spring Cloud Config,所以一般我们不会采用此方案,在实际操作中我们主要的实现方案有以下四种:Spring Cloud Config结合Git实现配置中心方案+Spring Cloud Config结合关系型数据库实现配置中心方案+Spring Cloud Config结合非关系型数据库实现配置中心方案+Spring Cloud Config与Apollo配置结合实现界面化配置中心方案。

    三、Spring Cloud Config结合Git实现配置中心方案

    (一)Git版基本工作原理(未加Spring Cloud Bus热刷新)

    配置客户端启动时会向服务器发起请求,服务端接收到客户端的请求后,根据配置的仓库地址将Git上的文件克隆到本地的一个临时目录中,这个目录是一个Git的本地仓库目录,然后服务端再读取本地文件返回给客户端。这样做的好处是,当Git服务器故障或者网络请求异常时,保证服务端仍然可以正常工作。

    在实际实现上,服务端需要配置好git的uri地址信息以及search-paths信息,并在对应Git中与之相对应,客户端在bootstrap文件中按照其内容和具体文件名进行配置label、uri、name、profile等消息即可,但是在基本实现上如果修改文件后依旧需要重启来解决此问题,所以需要进行手动刷新或结合Spring Cloud Bus进行热刷新。

    (二)Git多种配置信息讲解

    关于Git配置信息而言,其主要有以下几种方式:

    1.本地仓库

    Spring Cloud Config默认使用Git,对Git的配置也最简单,Config Server可用uri、username、password这三个参数就可以读取配置了,通过Git的版本控制可以使Config Server适应特殊的场景。

    测试时我们也可以使用本地仓库的方式,使用file://前缀,那么uri的配置就可以写作

    spring:
      cloud: 
        config: 
          server: 
            git: 
              uri: file://${user.home}/config-repo     #注意:Windows系统需要使用file:///前缀
                                                       #     ${user.home}代表当前用户的家目录

    2.占位符配置URI

    Spring Cloud Config Server支持占位符的使用,支持{application}{profile}{label}这些占位符对Git的uri配置,通过占位符使用应用名称来区分应用对应的仓库然后进行使用。这里需要注意仓库名称和仓库下面的配置文件名称一致才可以,因为配置了spring.cloud.config.name默认占位符匹配的是spring.application.name。

    spring:
      cloud: 
        config: 
          server: 
            git: 
              uri: https://github.com/hellxz/SpringCloudlearn/config-repo/{application}
                   #此时spring.application.name的值会填充到这个uri中,从而达到动态获取不同位置的配置
    

    3.匹配并配置多个仓库

    Spring Cloud Config Server除了使用{应用名}/{环境名}来匹配配置仓库外,还支持通过带有通配符的表达式来匹配。

    当有多个匹配规则的时候,可以用逗号分隔多个{应用名}/{环境名}配置规则。以官方文档例子举例:

    spring:
      cloud:
        config:
          server:
            git:
              uri: https://github.com/spring-cloud-samples/config-repo   #默认的仓库
              #注意:配置多个仓库时,Config Server 在启动时会直接克隆第一个仓库的配置库,其他配置库只有请求时才会clone到本地
              repos:
                simple: https://github.com/simple/config-repo
                special:
                  pattern: special*/dev*,*special*/dev*
                  uri: https://github.com/special/config-repo
                local:
                  pattern: local*
                  uri: file:/home/configsvc/config-repo
                test: 
                  pattern: 
                    - '*/development'
                    - '*/staging'
                  uri: https://github.com/development/config-repo

    如果{应用名}/{环境名}不能匹配到仓库,那么就在默认的uri下去查找配置文件。

    上边的例子中,

    • simple 仓库自动匹配到 simple/*
    • special 仓库的pattern,第一个是应用名以special开头,环境名以dev开头;第二个是应用名包含special,环境名以dev开头;多个匹配到同一uri的pattern用逗号分割
    • local 仓库的的pattern也会自动补全为local*/*
    • test仓库中的 pattern 是以通配符开始的,需要使用单引号

    4.子目录存储

    通过spring.cloud.config.server.git.searchPaths来定位到Git仓库的子目录中,相当于在uri后加上searchPaths的目录。

    searchPaths参数的配置也支持使用{应用名}、{环境名}、{分支名}占位符,比如spring.cloud.config.server.git.searchPaths={应用名},通过这样的配置,我们能让每一个应用匹配到自己的目录中。如下举例:

    spring:
      cloud:
        config:
          server:
            git:
              uri: https://github.com/spring-cloud-samples/config-repo
              searchPaths: '{application}'

    5.访问权限

    使用Git仓库的时候,使用HTTP认证需要使用username和password属性来配置账户,具体如下:

    (还可以使用SSH认证,Config Server本地的.ssh文件或使用私钥等进行配置,如:http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html#_git_ssh_configuration_using_properties)

    spring:
      cloud:
        config:
          server:
            git:
              uri: https://github.com/spring-cloud-samples/config-repo
              username: trolley
              password: strongpassword

    (三)基本的手动刷新和结合Spring Cloud Bus热刷新

    为了避免重启项目才能获取最新的配置信息,可以进一步优化做到手动刷新和结合Spring Cloud Bus进行热刷新,其基本要求一般不改动服务端相关配置和代码,但是需要各客户端增加断点访问依赖和安全依赖,这样就可以对外通过访问客户端刷新断点uri来进行刷新操作,手动刷新就是直接访问断点的方式,虽然简单,但是如果每次都要手动刷新的话,面对微服务很多的情况下,就会因为操作人员忘记或者遗漏的情况,从而造成服务出错。在生产实践中,我们往往要求结合Spring Cloud Bus进行热刷新。

    结合Spring Cloud Bus进行热刷新的操作如上图所示,用户更新配置信息时,检查到Git Hook变化,触发Hook配置地址的调用,Config Server接收到请求并发布消息,Bus将消息发送到Config Client,当Config Client接收到消息后重新发送请求加载配置消息。

    四、Spring Cloud Config结合关系型数据库MYSQL实现配置中心方案

    (一)基本实现原理

    Spring Cloud Config是一个独立的配置中心,支持多种存储配置信息形式,其中包括jdbc方式,其基本原理图如下: 

    git有它天然的优势,比如多版本管理、分支管理、提交审核策略等等,但是如果相对其中存储的数据做细粒度的权限控制,就力不从心了。我们可以将持久化从git迁移到MySQL上,这样的好处就是,可以针对配置中心,方便开发出一些对外接口,例如一些用户可配置的动态改更新的参数,同时,由于是数据库方式,当让可以自己在此基础上实现视图化和刷新机制,整体上显得更加优雅。

    (二)基本要求讲解

    具体实现上,需要Config Server端增加服务中心jar包、-配置中心jar包、连接msql数据库相关jar包这三个必须的jar包,在配置文件中需要增加对应的服务名称、连接配置信息、mysql 属性配置、指定注册中心地址等,具体我们要分析的是连接配置信息:

    #连接配置信息
     spring:
      application:
       name: config-server-jdbc
      profiles:
       active: jdbc
      cloud:
       config:
        server:
         default-label: dev
         jdbc:
          sql: SELECT akey , avalue FROM config_server where APPLICATION=? and APROFILE=? and LABEL=?

    连接配置信息中:

    • spring.profiles.active=jdbc ,自动实现JdbcEnvironmentRepository。
    • sql语句自定义,否则会默认为“SELECT KEY, VALUE from PROPERTIES where APPLICATION=? and PROFILE=? and LABEL=?”,具体可以参考 JdbcEnvironmentRepository 实现。非必须,这里由于采用mysql数据源,keyvalue是保留关键词,原生的实现语句会报错,所以需要重写一下这句查询语句(如果存储的表结构设计不同于上面准备的内容,也可以通过这个属性的配置来修改配置的获取逻辑)
    • 数据库建表为config_server,由于key,value和profile是mysql关键字,所以都在最前面加了a。当然表名字段名都可以自定义。
    • {application} 对应客户端的"spring.application.name"属性;
    • {aprofile} 对应客户端的 "spring.profiles.active"属性(逗号分隔的列表); 
    • {label} 对应服务端属性,这个属性能标示一组配置文件的版本.
    • 只要 select出来是两个字段 ,框架会 自动包装到environment的map<key,value> 。

    然后便是启动类等注解配置和数据库相关操作与构建,相关代码具体见后面博客及github。

    注意,JDBC存储的使用思路,具体使用实际上还有很多可以优化的空间,比如:索引的优化、查询语句的优化;如果还需要进一步定制管理,对于表结构的优化也是很有必要的。

    五、Spring Cloud Config结合非关系性数据库MongoDB实现配置中心方案

    (一)基本实现原理

    Spring Cloud Config作为独立的配置中心,支持多种存储配置信息形式,但是没有提供MongoDB的方式,但是目前已经有相关孵化器,其基本原理图如下:

    其基本原理与关系型数据库原理相类似,相关代码具体见后面博客及github。

    (二)基本要求讲解

    具体实现上,需要Config Server端增加服务中心jar包、-配置中心jar包、连接mongo数据库相关jar包这三个必须的jar包,在配置文件中需要增加对应的服务名称、连接配置信息、mongo属性配置、指定注册中心地址等,相关代码具体见后面博客及github。

    六、Spring Cloud Config使用技能及功能扩展

    (一)基本实用技能:本地参数覆盖远程参数

    主要是指使用本地的参数覆盖远程的参数,这在开发的时候经常会用到,主要配合内容如下:

    spring:
      cloud:
        config:
          allowOverride: true
          overrideNone: true
          overrideSystemProperties: false

    这三个属性的意思是:

    • spring.cloud.config.allowOverride:如果想要远程配置优先级高,那么allowOverride设置为false;如果想要本地配置优先级高那么allowOverride设置为true,默认为true;
    • spring.cloud.config.overrideNone:overrideNone为true时本地配置优先级高,包括系统环境变量、本地配置文件等等,默认为false;
    • spring.cloud.config.overrideSystemProperties:只有系统环境变量或者系统属性才能覆盖远程配置文件的配置,本地配置文件中配置优先级低于远程配置,默认为true。

    (二)客户端自动刷新实现

    在一些应用上面,不需要在服务端批量推送的时候,客户端本身需要获取变化参数的情况,这个时候需要使用客户端自动刷新来完成该功能。具体实现上,可以单独在二方包中增加一个用于自动刷新的功能,引入spring-cloud-config-client和spring-cloud-autoconfigure,并且增加自动配置类(增加间隔刷新时间),在该类中主要注入端点类,通过定时任务和刷新时间,进行配置请求刷新,添加配置后,我们将二方包引入到实际的客户端应用中。

    在客户端中需要引入spring-cloud-config-client、spring-boot-starter-security和我们刚刚新做的二方包,并且在对应的配置文件中增加spring.cloud.config.refreshInterval内容,写一个相关的控制器便可以开始测试了,相关代码具体见后面博客及github。

    (三)客户端回退功能实现

    客户端可以匹配回退机制,主要用于以下两种场景,应用回退手段来处理案例:

    • 因为一定原因出现了网络中断的情况;
    • 配置服务因为一定的原因进行维护而关闭。

    当启用回退时,客户端适配器将“缓存”本地文件系统中的计算属性。要启用回退功能,只需要指定存储缓存的位置即可。

    在具体实现上,我们同样需要在二方包增加对应可以实现客户端回退功能的内容,引入spring-cloud-config-client和spring-security-rsa,增加自动配置类(包含回退本地配置文件所在的文件和名称、要回退配置文件的路径、用来创建本地回退文件的方法)和相关配置内容,

    (四)客户端安全认证机制JWT实现

    Spring Cloud Config客户端使用JWT身份验证方法代替标准的基本身份验证,这种方式需要对服务端和客户端都要改造,具体如下:

    • 客户端向服务端授权Rest Controller发送请求并且带上用户名和密码;
    • 服务端返回JET Token;
    • 客户端查询服务端的配置需要在Header中带上token令牌进行认证。

    在具体实现上,需要在二方包中引入jwt相关内容,并将该二方包作为基本包使用,在此二方包中pom中必须需要引入一下这三项内容spring-boot-autoconfigure、spring-boot-autoconfiguration-processor、spring-cloud-starter-config,创建Config配置类(引入标示username和password以及endpoint内容,同时增加初始化init并采用注解@PostConstruct,表明在Servelt构造函数和Init()方法之间执行具体容器加载),并进一步创建实体类LoginRequest(对应请求username和password)和实体类Token(对应生成的token)。

    将此二方包引入到客户端的pom中,同时引入spring-cloud-config-client,并且在对应bootstrap文件中添加用于参与安全认证所需要的username、password、endpoint(是一个http地址,config server的访问授权地址)。增加启动类和控制器进行测试。

    接下来就需要对服务端的代码进行分析和讨论了,首先,需要在pom中引入spring-cloud-config-server、jwt、gson、spring-boot-starter-security,创建JwtAuthenticationRequest类用于传递用户名和密码,创建JwtAuthenticationResponse实体类返回token信息,创建JwtUser用户认证信息实体类,创建JWT的token认证过滤器和JWT工具类(用于生成token和token验证),创建JWT认证端点类(在认证过程中,未能认证通过的直接返回401状态码),接着创建一个认证账号的验证类MemberServiceImpl及将数据封装为json返回客户端的WebAuthenticationDetailsSourceImpl,最后创建Config进行安全和过滤的自动配置类,增加控制器用于测试,相关代码具体见后面博客及github。相关具体类调用时序图如下:

     

    七、Spring Cloud Config实现客户端及服务端高可用方案

    (一)客户端高可用原理及方案

    客户端的高可用方式,从方案角度来看,主要还是用file的形式,和前面客户端的回退方案思路大致一样,客户端高可用主要是解决当服务端不可用的情况下,在客户端仍然可以正常启动。从客户端的角度出发,不是增加配置中心的高可用性,而是降低客户端对配置中心的依赖程度,从而提高整个分布式架构的健壮性。

    具体实现上,仍然需要创建一个二方包,在二方包中引入spring-cloud-config-client,并且配置属性加载类,创建配置类命名为ConfigSupportConfiguration(主要是用于判断远程加载信息是否可用,如果不能用则将读取加载本地配置文件启动),同时在二方包中增加配置文件spring.factories指明org.springframework.cloud.bootstrap.BootstrapConfiguration。

    将该二方包引入对应的客户端的pom中,同时引入spring-cloud-config-client,在bootstrap文件中增加backup开关并指明你备份的本地地址fallbackLocation,增加对应的启动类和控制器用于测试,相关代码具体见后面博客及github。

    (二)服务端高可用原理及方案

    服务端的高可用在生产环境中也一样重要,通过结合Eureka注册中心的方式来搭建Spring Cloud Config Server高可用,通过Ribbon的负载均衡选择一个Config Server进行连接来获取配置信息,具体流程见上图。

    具体实现上,Eureka相关开发与之前是一样的,不用做多余的代码工作;服务端的pom文件中需要引入spring-cloud-config-server和spring-cloud-starter-netflix-eureka-client,其他按照之前的开发即可;客户端的pom文件中需要引入spring-cloud-config-client和spring-cloud-starter-netflix-eureka-client,并且在bootstrap中不在配置spring.cloud.config.uri信息用于指定Server端地址,而是增加了三个新的配置,具体如下:

    • spring.cloud.config.discovery.enabled:开启Config服务发现支持;
    • spring.cloud.config.discovery.serviceId:指定Server端的name,也就是Server端spring.application.name;
    • euraka.client.service-url.defaultZone:只想注册中心的地址。

    接着,按照以往的流程测试高可用就可以了,相关代码具体见后面博客及github。

    八、Spring Cloud Config与Apollo配置使用实现界面化操作

    (一)Apollo基本概述及基本功能介绍

    1.Apollo简介

    Apollo(阿波罗)是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

    Apollo目前在国内开发者社区比较热,在Github上有超过5k颗星,在国内众多互联网公司有落地案例,可以说Apollo是目前配置中心产品领域Number1的产品,其成熟度和企业级特性要远远强于Spring Cloud体系中的Spring Cloud Config产品。

    Apollo采用分布式微服务架构,它的架构有一点复杂,Apollo的作者宋顺虽然给出了一个架构图,但是如果没有一定的分布式微服务架构基础的话,则普通的开发人员甚至是架构师也很难一下子理解。

    2.Apollo基本功能介绍

    • 统一管理不同环境、不同集群的配置:Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置;同一份代码部署在不同的集群,可以有不同的配置,比如zk的地址等;通过命名空间(namespace)可以很方便的支持多个不同应用共享同一份配置,同时还允许应用对共享的配置进行覆盖
    • 配置修改实时生效(热发布): 用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序
    • 版本发布管理: 所有的配置发布都有版本概念,从而可以方便地支持配置的回滚
    • 灰度发布: 支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例
    • 权限管理、发布审核、操作审计:应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。 所有的操作都有审计日志,可以方便的追踪问题
    • 客户端配置信息监控: 可以在界面上方便地看到配置在被哪些实例使用
    • 提供Java和.Net原生客户端:提供了Java和.Net的原生客户端,方便应用集成;支持Spring Placeholder, Annotation和Spring Boot的ConfigurationProperties,方便应用使用(需要Spring 3.1.1+);同时提供了Http接口,非Java和.Net应用也可以方便的使用
    • 提供开放平台API:Apollo自身提供了比较完善的统一配置管理界面,支持多环境、多数据中心配置管理、权限、流程治理等特性。不过Apollo出于通用性考虑,对配置的修改不会做过多限制,只要符合基本的格式就能够保存。对于有些使用方,它们的配置可能会有比较复杂的格式,而且对输入的值也需要进行校验后方可保存,如检查数据库、用户名和密码是否匹配。对于这类应用,Apollo支持应用方通过开放接口在Apollo进行配置的修改和发布,并且具备完善的授权和权限控制。
    • 部署简单:配置中心作为基础服务,可用性要求非常高,这就要求Apollo对外部依赖尽可能地少。目前唯一的外部依赖是MySQL,所以部署非常简单,只要安装好Java和MySQL就可以让Apollo跑起来。Apollo还提供了打包脚本,一键就可以生成所有需要的安装包,并且支持自定义运行时参数

    (二)Apollo总体架构模块分析

    总体架构模块如下图所示:

    其主要包含了四个核心模块和三个辅助模块:

    1.四个核心模块及其主要功能

    • ConfigService:提供配置获取接口、配置推送接口,服务于Apollo客户端;
    • AdminService:提供配置管理接口、配置修改发布接口,服务于管理界面Portal;
    • Client:为应用获取配置,支持实时更新,通过MetaServer获取ConfigService的服务列表,使用客户端软负载SLB方式调用ConfigService
    • Portal:配置管理界面,通过MetaServer获取AdminService的服务列表,使用客户端软负载SLB方式调用AdminService

    (ConfigService和AdminService都是多实例无状态的部署,需要将自身注册到Eureka中并保持心跳)

    2.三个辅助服务发现模块

    • Eureka:用于服务发现和注册,Config/AdminService注册实例并定期报心跳,和ConfigService在一起部署
    • MetaServer:Portal通过域名访问MetaServer获取AdminService的地址列表,Client通过域名访问MetaServer获取ConfigService的地址列表。相当于一个Eureka Proxy,逻辑角色和ConfigService在一起部署
    • NginxLB:和域名系统配合,协助Portal访问MetaServer获取AdminService地址列表;和域名系统配合,协助Client访问MetaServer获取ConfigService地址列表;和域名系统配合,协助用户访问Portal进行配置管理

    Apollo可以和Spring Cloud Config搭建的微服务进行无缝集成。

    3.为什么选择Eureka作为服务注册中心,而不是使用传统的zk、etcd呢?

    有以下几方面的原因:

    • 它提供了完整的Service Registry和Service Discovery实现。首先是提供了完整的实现,并且也经受住了Netflix自己的生产环境考验,相对使用起来会比较省心。
    • 和Spring Cloud无缝集成:项目本身就使用了Spring Cloud和Spring Boot,同时Spring Cloud还有一套非常完善的开源代码来整合Eureka,所以使用起来非常方便。另外,Eureka还支持在我们应用自身的容器中启动,也就是说我们的应用启动完之后,既充当了Eureka的角色,同时也是服务的提供者。这样就极大的提高了服务的可用性。这一点是我们选择Eureka而不是zk、etcd等的主要原因,为了提高配置中心的可用性和降低部署复杂度,我们需要尽可能地减少外部依赖。
    • Open Source:由于代码是开源的,所以非常便于了解它的实现原理和排查问题。

    (三)Apollo客户端设计与运行环境介绍

    1.Apollo客户端设计

    Apollo客户端的实现原理:

    • 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。
    • 客户端还会定时从Apollo配置中心服务端拉取应用的最新配置。

           这是一个fallback机制,为了防止推送机制失效导致配置不更新

           客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回304 - Not Modified

           定时频率默认为每5分钟拉取一次,客户端也可以通过在运行时指定System Property: apollo.refreshInterval来覆盖,单位为分钟。

    • 客户端从Apollo配置中心服务端获取到应用的最新配置后,会保存在内存中
    • 客户端会把从服务端获取到的配置在本地文件系统缓存一份

           在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置

    • 应用程序可以从Apollo客户端获取最新的配置、订阅配置更新通知

    2.配置更新推送实现

    Apollo客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。长连接实际上我们是通过Http Long Polling实现的,具体而言:

    • 客户端发起一个Http请求到服务端
    • 服务端会保持住这个连接30秒
    • 如果在30秒内有客户端关心的配置变化,被保持住的客户端请求会立即返回,并告知客户端有配置变化的namespace信息,客户端会据此拉取对应namespace的最新配置
    • 如果在30秒内没有客户端关心的配置变化,那么会返回Http状态码304给客户端
    • 客户端在服务端请求返回后会自动重连

    考虑到会有数万客户端向服务端发起长连,在服务端使用了async servlet(Spring DeferredResult)来服务Http Long Polling请求。

    3.环境要求

    • Java1.7+
    • Guava15.0+ : Apollo客户端默认会引用Guava 19,如果你的项目引用了其它版本,请确保版本号大于等于15.0
    • 注:对于Apollo客户端,如果有需要的话,可以做少量代码修改来降级到Java 1.6

    Apllo这部分的内容目前我还没有在实践中应用,所以后续博客和github中可能暂不停工代码分析。

    参考书籍、文献和资料:

    【1】郑天民. 微服务设计原理与架构. 北京:人民邮电出版社,2018.

    【2】徐进,叶志远,钟尊发,蔡波斯等. 重新定义Spring Cloud. 北京:机械工业出版社. 2018.

    【3】https://blog.csdn.net/xiaofeng10330111/article/details/85682513.

    【4】http://blog.sina.com.cn/s/blog_17ea544680102xive.html.

    【5】https://www.cnblogs.com/hellxz/p/9306507.html.

    【6】https://www.jb51.net/article/147212.htm.

    【7】https://blog.csdn.net/hjbbjh0521/article/details/80363947.

    【8】http://blog.didispace.com/spring-cloud-starter-edgware-3-1/.

    【9】https://blog.csdn.net/john1337/article/details/82413837.

    【10】https://blog.csdn.net/zjh_746140129/article/details/86179522.

    【11】https://blog.csdn.net/ningjiebing/article/details/90638974.

     

    展开全文
  • 也就是说,我是最常见的技术管理了。 最开始,我极度不适应这个岗位。很累,但是不见成效。经过一年多的摸索,我终于在工作中总结出了一些心得,一些套路。所以我想给技术管理的同学们讲一讲: 我做了什么,来...

    我是一名新手项目经理,转项目管理岗1年半。在做管理之前,我是一名开发。也就是说,我是最常见的技术转管理了。

    最开始,我极度不适应这个岗位。很累,但是不见成效。经过一年多的摸索,我终于在工作中总结出了一些心得,一些套路。所以我想给技术转管理的同学们讲一讲:
    我做了什么,来拯救自己

    个人背景和公司背景

    1.目前为止工作4年半,也就是说,我做了3年开发,1年半管理
    2.我是一名野生程序员(就是非计算机专业毕业)
    3.我写过Android、iOS、web页面、java后端、python后端等等,看起来像传说中的全栈程序员。但其实心知肚明,我就是那种啥都会但啥也不行的程序员
    4.公司此前做产品,后来在产品的基础上转型外包扩大规模
    5.公司转型的基础上,我也转型成了管理
    6.我司项目经理是一个专门的职位,负责项目管理、技术架构、客户对接。总之项目的一切相关问题,包括技术问题,都由项目经理负责

    我做了什么

    事必躬亲,会毁了团队也会毁了自己

    这恐怕是所有从技术转管理的人,都会犯的通病。我刚开始带团队的时候,核心代码都要自己写。然后看同事进度的时候总是嫌这个慢,那个不行的。看不下去了索性自己上手吭哧吭哧写好。弄得自己非常疲惫。

    通常技术能力强的人,更有机会转型管理岗。所以在带团队的过程中,总是情不自禁的亲自动手完成别人应该做的事情。最终结果就是总会替代同事做他们自己本应该做的事情。

    但这个行为对管理者来说,只会让管理者越来越疲惫。而对整个团队来说,更是温水煮青蛙,一步一步把团队带进深渊。管理者负担太多工作,导致团队长期无法成长。轻则导致管理者累崩。重则导致项目崩塌、团队分崩离析。

    我应该怎么办:
    实际上,影响别人去做好一件事,比亲自去做要难的多。而我处理这个问题的方式
    1.忍住自己亲自动手的心理
    2.复杂任务拆解细化,分派任务时明确任务目标和验收标准
    3.分派任务时给予同事鼓励,对他们保持充分信任
    4.有难度的任务,提供一定的辅助或者培训

    多想、多说、多做

    我开始带团队的时候,一直忙于处理各种各样的项目问题,写代码、沟通需求、进度汇报、现场演示。大部分时间都埋头于项目本身,以为只要把项目做好,按时交付就行。做的太多, 导致思考的时间少了,对团队同事的关注也就少了。

    而一个团队领导者,多做是应该的,更重要的是多思考,多说

    思考什么:
    1.项目干系人是否清楚,干系人不清楚会导致项目管理混乱,出的东西不满足要求
    2.需求是否合理,需求是否可以优化、技术架构是否满足需求
    3.功能是否拆解到位,任务分派是否可合理
    4.若尝试新技术,是否有把握在出问题的时候力挽狂澜
    5.团队成员状态如何,要如何激励他们
    6.项目流程是否合理,如何改进
    7.项目成本如何控制,时间节点如何把握,质量如何保证

    以上都是我目前每个项目都会思考的问题。项目管理者一定要告诫自己:不要用战术上的勤奋掩盖战略上的懒惰

    说什么:
    1.需求不清楚要问
    2.需求可以优化要说,不要闷声发大财,坑的是自己
    3.有困难处理不了要及时汇报给领导,悉知客户
    4.团队成员有问题要给予正确指导,而不是放任自由
    5.进度情况、项目情况要积极和客户保持沟通

    不仅是监督,更要是指引

    “那个功能写完了吗?”;“这个功能怎么还没做好”;“你这个东西什么时候能够写完”。

    以上是我日常工作中最常做的事情,即便到了目前,我依然在做这些事。监督催促同事干活!每天像个监工一样,漫步在同事周围,监督他们的进度,在他们耳边逼逼叨。

    但我认为,催促同事干活的不应该是项目经理,而是项目流程,是规则。每个人明确自己的角色,各司其职,由规则约束着大家前行。而不是简单靠项目经理赶着大家往前走。

    但我并没有做好这个工作,目前还是处于制定计划、监督执行的死循环中。对于规则、流程只是有个模糊的想法,还不成型,也未经试验。暂不与大家分享。

    救火能力固然重要,但更要防范于未然

    我由技术转管理的初期,最擅长的事情就是技术。所以一直在项目中充当救火队员的角色。

    有突发情况?我自己来;没有人能攻克技术难点?那我自己来;开发了很久,发现需求理解错误?咔咔咔自己一顿改;总之就是这有问题,咔咔咔自己一顿弄,那有问题,嗒嗒嗒自己一顿搞。总用自己的技术能力挽救项目中的各种突发情况。

    而作为一个项目管理者,救火能力固然重要,要在关键时刻能够站出来力挽狂澜。但更重要的,我想是如何去避免突发情况吧。而要避免突发情况,就要思考如何做好风险管理。提早做好准备,把可能出现的未知风险扼杀在襁褓中。

    在IT项目管理中,我认为风险主要存在于以下几点,应思考准备以便规避风险:
    1.需求变更。开发中需求变更是难免的,但如何控制需求变更,如何管理需求变更是我们着重要考虑的问题。SCALPEL方法,大家可以了解一下
    2.项目干系人不清楚,导致项目需求分歧
    3.技术难点预估不足。总是会存在开发过程中才发某项功能无法实现或者实现成本过高,这主要是由于前期对需求理解不足,对自我或团队太自信造成的
    4.计划制定问题。开发计划制定有问题,可能由于错误的估计了团队的能力,项目的难度造成的。计划风险通常是由项目经理自己造成,需自我强化、学习、思考来避免此问题
    5.组织成员问题。开发成员不足、人员离职、其它项目需紧急支援人手、团队沟通不畅都可能引起此问题
    6.流程风险。过于流程化,导致流程工作占用太多开发时间,流程和灵活是一对冲突的概念。如何解决项目管理中流程化和灵活度的问题,我认为是项目经理较重要的能力之一
    7.性能问题。开发过程中,最怕的是功能做完了,最后发现性能不行。导致前期开发工作全白费。所以在需求阶段,软件的用户量,数据量都是要考虑在内的。在开发之初,就要在程序设计过程中将性能问题考虑进去

    保持内心强大

    项目管理是一个磨人的工作。虽然外面说要做风险管理,但突发情况避免不了。一个合格的项目管理者,要有泰山崩于前而色不变的内心。

    需求变了不要紧、计划变了不要紧、成员情况发生变化不要紧。毕竟我们都知道世界上唯一不变的就是变化,尽可能的给自己准备好Plan B

    背黑锅要上,邀功也要上

    我相信各位做开发的时候,最讨厌的就是那种黑锅你背,有功他领的leader。既然如此,希望我们也不要变成这样的人。

    项目经理嘛,统管这个项目的一切。项目出了问题,不管因为什么原因,都一定是项目经理的责任。你的同事可能在项目里表现不佳,你的客户可能经常变更需求。不管多少理由,都不是你甩锅的理由。有锅一定要自己扛着,所以,背黑锅要上

    做的好,也要说出来。超出客户预期的项目闪光点,要告诉客户团队的优秀。项目完成的不错,要告诉老板团队的优秀。让客户让老板知道你们团队做的好,下一次他们才会给你们更充分的信任。项目成员表现优秀的地方,不光要表扬,也要和上级说。你是和你团队成员接触最紧密的人,他们的有点别人不知道,但你知道。所以他们优秀的地方,要宣扬,要让别的部门知道,要让上级知道。所以邀功也要上

    在帮派里,不能为兄弟们挡刀并引领兄弟们前进的老大是不值得追随的,弟兄们在你手下做事受尽委屈,争不了一口气,那这个老大也做不长。

    技术出身的管理者中,我相信背黑锅要上是大家都能做到的。但技术人员不善言辞,总是闷头干活,不会表达。所以要适当学会邀功,为团队邀功。希望大家都能学会邀功也要上

    不要抛弃技术,它可能是你的救命良药

    做项目管理以后,尤其是像我现在这种一个人带多个项目的情况。管理工作会占用每天极多的时间。这是工作本身需要你做的,无可厚非。我想说的是,即便如此,也要保证自己对技术的学习。

    了解新技术也好,写写开源项目也好,总之要保持对技术的持续学习。他总能在你需要的时候帮到你。

    学如逆水行舟,不进则退,与大家共勉

    总结

    总体而言,我认为一个新手项目经理,要学会以下事情:
    1.要学会带领团队成长,不要事必躬亲
    2.要多进行思考
    3.要学会风险管理
    4.要保持内心的强大
    5.要学会邀功

    以上,就是我想和大家分享的内容,其中很多点,我自己做的也不是很好,依然需要自我练习和努力。希望各位技术转管理的同学,都能尽快适应自己的工作。

     

    本文转自这里:https://www.cnblogs.com/zer0Black/p/9571987.html

    展开全文
  • PHP实现一个简单的图书管理系统

    万次阅读 多人点赞 2018-01-16 14:22:37
    刚刚我收到了一个消息,老师竟然布置了一个课设 ,要求做一个后台管理系统。做归做,但是!本着为老师节省时间的心态,我花了大量的时间,消耗了无数脑细胞扫描了一遍老师给的课题,最终掐指一算选了一个最简单的...

           刚收到了一个消息,老师竟然布置了一个课设 ,要求做一个后台管理系统。做归做,但是!本着为老师节省时间的心态,我花了大量的时间,消耗了无数脑细胞扫描了一遍老师给的课题,最终掐指一算选了一个最简单的——>"图书管理系统"。

        刚开始我的想法是用jsp+(struts2+spring+hibernate)+Oracle写的,毕竟以前也用这玩意写过类似的东西,等我打开Oracle后却发现我的Oracle又又又出问题了,再加上用上面这三大框架写的话文件太多了,于是我毅然决然放弃它了。直接用更简单的语言(PHP)来写。

     

     

    第一 用到的技术

        技术和语言:php + MySQL

        开发环境:windows 10

        开发工具:sublime3 + XAMPP

     

     

     

    第二 要求(我只实现了下面这几个要求,其他的没时间弄,而且我也不想写了)

                1.用户管理:能够增加、删除和修改用户(用户管理,注销登录);

                2.图书管理:进行分类管理,图书管理 等操作;

                3.信息管理:在主界面搜索栏对图书或读者名称可以进行搜索查询,能够增加、删除和修改;

     

     

    工具及源码下载在最下方    请在新下载地址下载!(新下载地址里面有详细使用教程)

     

    旧下载地址源码复制完报错解决方案:  

                                                 https://pan.lanzou.com/i0k52kh

                                                 把这个压缩包内的两个文件夹粘贴放到xampp\mysql\data\覆盖下就可以了

                登录帐号:php 密码:php

     

     

    部分截图:


       
    登录界面:

       
    主界面:


        图书馆管理界面:

       
    读者管理界面:

       
    读者详情界面:

        类型管理:

       

    下载:
        工具XAMPP下载地址  https://download.csdn.net/download/leslie___cheung/10260215
            链接:https://pan.baidu.com/s/1sm4KFM1密码:2zxx
        源码下载:http://download.csdn.net/download/leslie___cheung/10208367  (旧地址)
        (新下载地址https://download.csdn.net/download/leslie___cheung/10479307

    (太久了 本人也没有源码了 别下)
      

    源码使用方法:(新下载地址里面有详细使用教程)
        将其中的将bms和mysql整个文件夹和ibdata1(bms文件夹里的是数据库文件)复制粘贴到xampp安装路
    径下的mysql文件夹里的data文件夹里面,接着接着打开XMAPP,然后再打开浏览器输入网址" http://localhost/phpmyadmin "
    刷新页面数据库就会导入。另一个图书管理系统文件夹复制粘贴到xampp安装路径下的htdocs文件夹里,
    浏览器输入" http://localhost/图书管理系统 "即可进入管理界面。
    我的路径:数据库文件夹粘贴路径 :"D:\xampp\mysql\data\"
         图书管理系统粘贴路径 :"D:\xampp\htdocs\"

     

     

     

    展开全文
  • 从技术走向管理》读后感

    千次阅读 2015-07-14 08:50:25
    近日,本人连续花了两个周末的时间阅读完了《从技术走向管理》这本书籍,仔细读完后个人颇有感触。作为部门新晋的管理菜鸟,本人同样也遇到了与书中相似的诸多困惑,这些困惑容易是人迷失方向。  曾经,作为技术...
  • C语言实现学生成绩管理系统

    万次阅读 多人点赞 2017-09-20 23:41:31
    C语言实现学生成绩管理系统V1.0某班有最多不超过30人(具体人数由键盘输入),参加某门课程的考试,实现如下学生成绩管理: 录入每个学生的学号和考试成绩 计算课程的总分和平均分 按成绩由高低排出名次表 按学号...
  • 基于Javaweb实现餐饮管理系统

    万次阅读 热门讨论 2021-06-15 10:26:38
    本系统基于Javaweb开发实现一套餐饮管理系统,可以实现用户在线定桌、点菜并进行支付等功能,系统管理员可以在系统后台对所有的菜品、餐桌、订单等进行相关信息的管理和维护工作。本系统功能完整,界面简洁大方,...
  • 基于Javaweb实现小区物业管理系统

    万次阅读 2021-06-15 12:27:26
    基于JSP/SERVLET实现的物业管理系统,分物业管理员和业务两个角色。管理员进入后台主要管理的功能有住户信息管理,物业缴费管理,公告信息管理,报修信息管理,投诉信息管理。业务进入后台主要管理功能有查看个人...
  • 基于java springboot的图书管理系统设计和实现

    万次阅读 多人点赞 2021-08-13 13:47:50
    随着网络技术的发展、计算机应用水平广泛提高,原来系统的时效性、数据的正确性、操作的方便性上都存在不足,已影响系统的正常使用。经过考察比较,决定自己对图书管理系统重新设计,使系统能利用软件开发技术的...
  • 《手把手实现Java图书管理系统》带你0开始完成毕业设计!附赠源码、文档、数据库脚本等全部资料
  • 技术管理,就要丢掉技术吗?

    万次阅读 多人点赞 2021-01-31 09:05:00
    许多技术管理者都有这样的困惑,我们做技术管理的,写代码的时间越来越少,手越来越生疏,但是参与了更多的技术评审和技术决策,这似乎是件很矛盾的事情。因此,他们时常感到很焦虑,自己技术能力越来...
  • 管理后主要功能模块:用户管理、角色管理、承菜管理、权限管理、竞赛报名管理、经费申请和审核管理、项目结题管理、立项申请管理等具体功能 用户管理:用户列表的显示、数据的添加以及删除修改等操作。 角色管理:...
  • 技术管理岗岗位职责总结

    千次阅读 2015-12-31 23:21:40
    技术总监一般负责一个企业的技术管理体系的建设和维护,制定技术标准和相关流程,能够带领和激励自己的团队完成公司赋予的任务,实现公司的技术管理和支撑目标,为公司创造价值。 职务名称:技术总监 直接上级: 总...
  • 基于java springboot博客管理系统设计和实现

    千次阅读 多人点赞 2021-08-19 10:54:34
    博客,又译为网络日志、 部落格或部落阁等,是一种通常由个人管理、不定期张贴新的文章的网站。 博客上的文章通常根据张贴时间, 以倒序方式由新旧排列。 许多博客专注在特定的课题上提供评论或新闻, 其他则被...
  • 微软技术解答:根据我的研究,在Windows系统中暂时不提供工具直接实现这种功能。您可以先将需要加入本地管理员组的域用户放入一个OU中,然后通过组策略执行脚本来完成。下面我提供一些方法,供您参考:1.使用域...
  • C语言实现简单的学生管理系统

    千次阅读 多人点赞 2019-12-09 18:22:09
    C语言实现简单的学生管理系统 作者:人工BUG工程师 大一上学期用C语言写的学生管理系统,写的比较粗糙,但是基本的功能都实现了,发出来供有需要的同学参考。 预备知识 结构体以及结构体数组的使用 清屏函数 ...
  • 基于javaweb宠物领养平台管理系统设计和实现

    万次阅读 多人点赞 2021-05-20 11:32:16
    管理员角色包含以下功能:发布宠物信息,寄样信息管理,新闻资讯管理,用户管理,留言管理,管理员登陆,类别管理,系统公告管理,论坛版块管理,领养管理等功能。 主要技术:Java、spring、mysql、tomcat、jquery、...
  • 参加江总《从技术走向管理》讲座有感

    万次阅读 热门讨论 2011-05-04 17:12:00
    技术走向管理的四种典型特点:1.过度关注技术细节,容易越位管理。...4.从技术转型管理,心理压力大,如何积累经验,不断学习管理知识。自己在对这四个方面也是感受深刻,在这方面自己也是亟待提高。
  • C++实现员工工资管理系统

    万次阅读 多人点赞 2017-07-05 22:18:23
    该员工工资呢管理系统用于管理某公司的:经理、技术员、销售员、销售经理4类员工信息,他们都有基本信息:工号、姓名、性别、部门、岗位、出生日期、当月工资等.
  • jsp实现图书管理系统

    千次阅读 多人点赞 2020-08-02 13:09:27
    图书管理系统 根据对图书管理业务的分析,给出图书管理系统功能设计如下: 1.系统管理模块:系统管理包括用户登录,退出功能; 2.借书规则管理模块:管理员可以对借书规则(可借多少天,可借多少本,超期一天罚款...
  • C语言使用链表实现学生信息管理系统 代码实现的功能: 1.插入学生信息 2.显示学生信息 3.删除学生信息 4.在指定位置插入学生信息 5.查找学生信息 代码内容: #include #include #include #define Max_...
  • 物业管理系统的设计与实现

    千次阅读 2019-11-05 16:20:00
    物业管理系统的设计与实现 1、概况 语言:java语言 页面:jsp 项目构建:maven 前端技术:JQuery、BootStrap 后台:Spring+SpringMVC+Mybatis 时间选择器:DatePicker 数据库:Mysql 数据展示:ECharts ...
  • 对于PM来说,要管理好需求,离不开四个层面的列表管理。 1、Feature List:需求特性列表,日常的需求管理管理好了,治大国如烹小鲜,管理不好,每时每刻被动煎熬。 2、Feedback List:反馈列表,各个渠道反馈...
  • spring的事务管理有几种方式实现,如何实现

    万次阅读 多人点赞 2016-06-25 20:49:25
    Spring+Hibernate的实质: 就是把Hibernate用到的数据源Datasource,...那么再没整合之前Hibernate是如何实现事务管理的呢? 通过ServletFilter实现数据库事务的管理,这样就避免了在数据库操作中每次都要进行数据
  • 《Java精品毕设》java ssm springboot酒庄内部管理系统(源码+sql+论文)主要功能:用户、角色、权限、菜单、内部邮件群发、给管理员发送邮件、酒类管理、红酒信息管理、通知公告管理

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,419,477
精华内容 567,790
关键字:

如何实现从技术到管理