java服务器大全,java持久层框架有哪些?
java持久层框架,网上随便搜了搜,就有Hibernate、MyBatis、Spring Data、TopLink等,而我最常用的就是MyBatis,Hibernate也使用过一段时间,很意外没有搜到 iBatis ,因为我们部分维护应用的持久层框架还处于 iBatis 的情况。当然,由于安全因素,直接拼 SQL 的使用最原始的 JdbcTemplate 的应用是没有的。持久层框架,也称 ORM 框架,对象关系映射(ORM,Object Relational Mapping)是一种功能,用于通过将对象状态映射到数据库列来开发和维护对象和关系数据库之间的关系。它能够轻松处理(或执行)各种数据库操作,如插入,更新,删除等。
最常用的就是 Mybatis ,MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。在 spring boot + gradle 的技术体系下使用 Mybatis 的的依赖示例如下:
dependencies {
compile "org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.0"
compile "mysql:mysql-connector-java:5.1.43"
}
# yml 配置文件,
server:
spring:
#数据库连接配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&useSSL=false
username: root
password: 123456
filters: stat
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
#mybatis的相关配置
mybatis:
#mapper配置文件
type-aliases-package: com.wei.you.comb.entity
mapper-locations: classpath*:/mappings/*.xml,classpath*:/mappings/**/*.xml
#开启驼峰命名
configuration:
map-underscore-to-camel-case: true
用过一段时间依赖 Hibernate 的 Spring Data JPA,对其影响最深的是 对象间的关联关系,各种联合主键和外键注解,对使用者解决相关问题的能力有一定的要求,其大致有3种使用方法。
1.查询创建Query Creation。Spring Data Jpa通过解析方法名创建查询,框架在进行方法名解析时,会先把方法名多余的前缀find…By, read…By, query…By, count…By以及get…By截取掉,然后对剩下部分进行解析,第一个By会被用作分隔符来指示实际查询条件的开始。 如:
User findByUsername(String username);
List<User> findByUsernameIgnoreCase(String username);
List<User> findByUsernameLike(String username);
该方法上还支持原生查询Native Queries
@Query(value = "select * from tb_user u where u.email = ?1", nativeQuery = true)
User queryByEmail(String email);
@Query(value = "select * from tb_user u where u.email = :email", nativeQuery = true)
User queryByEmail(@Param("email") String email);
2.hql查询方式。
Session session=HibernateUtil.getCurrentSession();
Transaction tx=session.beginTransaction();
//hql简单查询 注意 hql中不支持 直接使用*号 但在聚合函数中 比如 count(*) 可以
List<Customer> list = session.createQuery("from Customer").list();
tx.commit();
3.Criteria查询方式
Session session=HibernateUtil.getCurrentSession();
Transaction tx=session.beginTransaction();
//简单查询
Criteria criteria = session.createCriteria(Customer.class);
List<Customer> list = criteria.list();
以上几种,在不同的业务需求中都有相应的使用场景,但整体感觉其学习成本较高,执行效率不高,也可能是学的不够深入吧。
最后,借用网上找到的一种观点来结尾,也是我比较认同的:对这个东东不用纠结,团队用啥你用啥就得了,出问题有同事协助解决,如果和团队的技术栈不一致,出问题就只能自己补坑,花费大量的时间还不一定有结果。
作者:夕阳雨晴,欢迎关注我的头条号:偶尔美文,主流Java,为你讲述不一样的码农生活。
java微服务日志处理的最合适方案是什么?
情况及需求描述:1.java spring boot开发的微服务有多个,每个微服务在4台云服务器上部署4个节点2.有1个网关,部署在一台服务器上,所有请求都通过网关进行转发和负载均衡3.需要对网关发起的每一请求都记录日志,例如请求的时间、ip、参数、耗时、返回结果等4.网关的访问日志需要保证安全持久化,即不能丢失,以便后期对账5.希望网关的访问日志的保存,能够具有一定的实时性,以便后台能够即时看到访问的变化、做数据分析等6.每个微服务、节点上的错误日志能够远程访问查看,而不是登录每一台与服务器去查日志文件7.一共有4台云服务器,2台阿里、2台华为,每台双核16g,数据库只有一个阿里的rds和redis
尝试方案1:在网关配置logback,将访问日志输出到logstash,再由logstash输出到elastic,最后kibana展示,即ELK方案问题:1.logstash的过滤器grok配置有点难,默认如果log.info(RequestModel)这样打日志,RequestModel中的信息会在logstash中单独以一个"message"字段进行保存,这对后面kibana写过滤表达式很难处理。后来采取java代码中"log.info("{} {} {}", request_uri, request_ip, request_param)"这种日志产生后,仅希望将这些request_*字段输出至logstash,多余的字段不要,可用grok过滤,但一些自定义的字段不太会处理,正则表达式也不怎么会用2.对elastic掌握还不是很深,之前有遇到过数据丢失的情况,由于这次需求要保证数据不能丢失,所以暂不太敢贸然使用尝试方案2:仍然在网关配置logback,但输出至db mysql,然后用logstash把数据导到elastic,最后kibana展示问题:仍然是关于仅保存自定义字段的需求,网上了解了一圈,默认是要3张表,肯定不是我要的;还有用继承重写方法的,但看起来仍然没有达到我要的要求。并且还有一个连接池的问题没有解决,就也没有研究下去。尝试方案3:网关处理好需要保存的日志信息后,直接调用dao层持久化到db mysql,然后用logstash把数据导到elastic,最后kibana展示问题:网关上的请求肯定是量很大的,考虑单独架设一个mysql服务,专门用来保存日志,也就是只有写操作,不去影响到业务db。保存的话,肯定不能单条写入,那就想到用队列,队列满一定条数后,批量写入,但这似乎又不能达到实时性的要求
所以想问,分布式服务的访问日志以及后台业务日志,究竟应该如何设计,使其具备一定实时性、持久化、可分析、可扩展、可视化等要求
如何才能快速的在服务器上部署一个Java项目?
war包项目部署很简单,首页要搭建运行环境(JDK,Tomcat,MySQL或Oracle),安装什么软件(数据库工具Navicat或SQL Developer等),具体怎么安装百度就好,环境安装好后直接把项目war包放到Tomcat下的webapps目录下即可,最后再启动Tomcat服务。
如何用Java获取远程服务器中指定目录下的所有文件夹名?
直接的貌似不可以的,你可以在远程服务器上写个读指定目录下所有文件夹名的代码文件,当前客户端再调用那个代码文件显示出来
nginx是Java后台开发最常用最入门的技术吗?
没有java nginx这样一个叫法。nginx是最常用的web服务器和反向代理服务器。但是不能解析java,也不是什么java框架。和nginx一类的有个web服务器和java应用服务器java Servlet容器Apache Tomcat。
强大的web服务器nginxnginx是有毛子著名网站rambler.ru为自己量身定做的一个web服务器,第一版0.1.0于2004年发布。开源许可协议为bsd协议。发布后由于其稳定,高性能,强大单位综合功能性使其迅速占领市场,目前是占有量最大web服务器,反向代理和web缓存服务器之一。
也可以作为java容器的前端或cdn部分,通过反向代理到后端java服务器。
java应用服务器tomattomcat在虫虫回答和文章中多次提到过,是有apache基金会下的一款免费开源的web服务器和java应用服务器。是世界上使用最多的java应用服务器,包括世界上最繁忙的系统,天朝12306中国铁路在线购票系统的后端java应用服务器也是tomcat。
tomcat目前维护三个系列tomcat9,tomcat8和tomcat7。最新版本分别为9.0.7,8.0.51以及7.0.86,还在用5和6的同学该升级了。
tomcat目录结构
tomcat内部功能解析
java开发框架最后说下java开发框架,java开发框架多不胜数,就web开发方面最主要的就数SSH了。SSH里面用的最流行最广泛则要数spring框架了。关于这个框架请关注虫虫,看我的文章《spring框架,spring boot spring io的历史和渊源》。