【开发笔记】Spring boot+bootstrap+MySQL+Hadoop搭建一大数据分析系统

一、关于iframe的自适应

要求:

  1. iframe本身不能出现滚动条,只有浏览器拥有滚动条;
  2. 菜单是动态的可折叠可收起成简化模式的,要求iframe能够根据菜单收起所导致的ifame内容范围的变化进行变化;
  3. 要求浏览器窗口变化时,ifame也能够自适应大小。
//iframe页的js代码
function SetWinHeight(obj){
    var win=obj;
    if (document.getElementById){
        if (win && !window.opera){
            if (win.contentDocument && win.contentDocument.body.offsetHeight){
                win.height = win.contentDocument.body.offsetHeight; 
                //我写了width的设置后,反倒不能自适应菜单收起所导致的宽度变化了
                //win.width = win.contentDocument.body.offsetWidth;
            }
            else if(win.Document && win.Document.body.scrollHeight){
                win.height = win.Document.body.scrollHeight;
                //我写了width的设置后,反倒不能自适应菜单收起所导致的宽度变化了
                //win.width = win.Document.body.scrollWidth;
            }
         }
    }
}

//保证窗口大小变化时,iframe也能够自适应
window.onresize=function(){ 
    SetWinHeight();
}
$(function(){
    SetWinHeight();
});

修改个人信息



 

二、jQuery中ajax的post出现404

参考大神解释:https://zhidao.baidu.com/question/442974647.html

1.记录下发生404错误的链接;
2.在服务器端直接输出出现“错误”的链接的内容,看看可不可以;
3.如果不可以,说明是链接有问题;如果可以,检查jq发送的post请求,看看参数有没有被转义;
4.如上面都没问题,那就是服务器的连接有问题,不稳定

发现是自己的后台函数没写对。

 

三、eclipse对某一个包不编译

不知怎么的,我的eclipse对其中一个包就是不编译,其他的包都编译,但是这个就是不编译,Problem报The tag handler class for "pager" (common.util.pager.PagerTag) was not found on the Java  Build Path。

解决:在这个包上右键Build Path→Include

P.S. 这一定是个愚蠢的错误。

 

四、小问题

需要注意:

1. 用jpa建表的时候,字段名不要出现大写,不要出现下划线,否则很麻烦

2. 注意注解的正确

之前出现了一个问题:

***************************
APPLICATION FAILED TO START
***************************

Description:

Field xxxRepository in xxxxxx.service.impl.IdentityServiceImpl required a bean of type 'package.xxxRepository' that could not be found.


Action:

Consider defining a bean of type 'package.xxxRepository' in your configuration.

解决办法就是:

/**
 *  业务层实现类   
 */
@Service("identityService") // 配置业务层的bean
@Transactional(readOnly=true)
public class IdentityServiceImpl implements IdentityService {
	// session
	/** 定义Repository对象 */
	@Autowired                                     // bytype
	@Qualifier("xxxRepository")                    // byName
	private XxxRepository xxxRepository;

/**
 *  @Qualifier后面的括号里的名字要和写repository接口的包名保持一致
 */

3. Spring中Controller里传的参,后续在取值的时候最好不要用直接传进来的参数的名字,否则会出错。

如之前写的 @RequestParam("start") String start,这个时候,start这个变量的值就算是定下了,之后改起来容易出现问题,所以后续的代码在使用的时候,最好不要再用start这个变量名字,可以新建个参数再修改传参,后续在service里的方法传参时也不要用start了。

4. 报错Connection is read-only. Queries leading to data modification are not allowed

是因为我在service的实现类上加了@Transactional(readOnly=true)注解,修改注解为@Transactional(readOnly=false,rollbackFor=java.lang.RuntimeException.class)后解决

5. Mysql的存储时间和页面上读取的时间不一致

参考:https://blog.csdn.net/q283614346/article/details/90737288,发现是我的serverTimezone写的是UTC时间。

 

五、Spring boot整合Hadoop,远程运行mapreduce方法jar包

1. 首先修改pom文件



    org.springframework.data
    spring-data-hadoop
    2.5.0.RELEASE




    org.slf4j
    slf4j-log4j12



    org.springframework.boot
    spring-boot-starter-web
    
    
         
            ch.qos.logback
            logback-classic
        
    




    jdk.tools
    jdk.tools
    1.8
    system
    ${JAVA_HOME}/lib/tools.jar

2. 将方法jar包放置在spring的class path目录中,比如我放在了src/main/resources下

3. 添加application-context.xml文件,写的是连接hadoop和调用方法的代码




    
    
        fs.defaultFS=hdfs://xxx.xxx.xxx.xxx:9000
    

    
    
    
        
        
    

4. 添加hadoopcontroller,写运行上述方法包的代码

package org.fkit.simplespringdatajpatest.controller;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
@RequestMapping("/hadoop")
public class hadoopController {
	
	private static final Log log = LogFactory.getLog(hadoopController.class);
	
	@RequestMapping(value="/test")
	public static String Test(String[] args){
		try{
			@SuppressWarnings("resource")
			AbstractApplicationContext context = new ClassPathXmlApplicationContext(
					"/application-context.xml", hadoopController.class);
			log.info("xxx with HDFS copy Application Running");
			context.registerShutdownHook();
		}catch(Exception e){
			e.printStackTrace();
		}
		return "运行成功";    //我在测试时是将结果直接输出到网页页面上显示,所以要加@ResponseBody注解
	}
}

5. 在页面访问http://localhost:8080/hadoop/test,运行过程中的日志输出会在eclipse控制台,运行完成后会在网页显示“运行成功”。

 

未完待续……

你可能感兴趣的:(开发笔记)