自己跟前辈学写的小插件

import java.io.File;
import org.iq80.leveldb.DB;
import org.iq80.leveldb.Options;
import org.skife.jdbi.v2.DBI;
import io.dropwizard.Application;
import io.dropwizard.jdbi.DBIFactory;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;

public class TestIpService extends Application<TestIpConfiguration> {

	@Override
	public void initialize(Bootstrap<TestIpConfiguration> bootstrap) {

	}

	@Override
	public void run(TestIpConfiguration config, Environment environment)
			throws Exception {
		final DBIFactory factory = new DBIFactory();
		final DBI jdbi = factory.build(environment, config.getIpDBFactory(),
				"mysql");
		final IpDBInterface ipDI = jdbi.onDemand(IpDBInterface.class);
		final DB db = org.fusesource.leveldbjni.JniDBFactory.factory.open(
				new File("example"), new Options());
		environment.jersey().register(new FackU(ipDI, db));
	}

	public String getName() {
		return "test-ip";
	}

	public static void main(String[] args) throws Exception {
		new TestIpService().run(new String[] { "server", "test-ip.yml" });

	}
}



import java.util.HashMap;
import java.util.Map;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Optional;

@Path("/getIpInfo")
@Produces(MediaType.APPLICATION_JSON)
public class TestIpResource {

	private IpDBInterface ipDI;
	private Map cache = new HashMap();

	public TestIpResource(IpDBInterface ipDI) {
		this.ipDI = ipDI;
		Map data = new HashMap();
		data.put("country", "中华人民共和国");
		data.put("province", "河北省");
		data.put("city", "北京市");
		data.put("county", "东城区");
		cache.put("1.128.45.101", data);
	}

	public IpDBInterface getIpDI() {
		return ipDI;
	}

	public void setIpDI(IpDBInterface ipDI) {
		this.ipDI = ipDI;
	}

	public Map getCache() {
		return cache;
	}

	public void setCache(Map cache) {
		this.cache = cache;
	}

	@GET
	@Timed
	public Object getIpInfo(@QueryParam("ipAddr") Optional<String> ipAddr) {

		String queryIp = ipAddr.get();
		System.out.println("=======queryIp======" + queryIp);

		Map ipData = (Map) cache.get(queryIp);
		if (ipData == null) {
			String Accept = "";
			String msg[] = queryIp.split("\\.");
			for (int i = 0; i < msg.length; i++) {
				if (msg[i].length() == 2) {
					String a = "0" + msg[i].substring(0, msg[i].length());
					msg[i] = a;
				}
				if (msg[i].length() == 1) {
					String b = "00" + msg[i].substring(0, msg[i].length());
					msg[i] = b;
				}
				if (i == msg[i].length() - 1) {
					Accept = Accept + msg[i];
				} else {
					Accept = Accept + msg[i] + ".";
				}
			}
			IpLocation ipln = ipDI.findByIpLocation(Accept.trim());
			if (queryIp.length() == ipln.getIp_start().length()) {
				return ipln;
			}
			Map map = new HashMap();
			map.put("country", ipln.getCountry());
			map.put("province", ipln.getProvince());
			map.put("city", ipln.getCity());
			map.put("county", ipln.getCounty());
			cache.put(queryIp, map);
		}
		return cache.get(queryIp);
	}
}



import java.io.File;
import java.util.HashMap;
import java.util.Map;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import org.iq80.leveldb.DB;
import org.iq80.leveldb.Options;
import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Optional;

@Path("/getIpInfo")
@Produces(MediaType.APPLICATION_JSON)
public class Resourtstest {

	private IpDBInterface ipDI;
	private DB db = null;
	
	@GET
	@Timed
	public Object getIpInfo(@QueryParam("ipAddr") Optional<String> ipAddr){
		String queryIp = ipAddr.get();
		System.out.println("=======queryIp======" + queryIp);
		try {
			String value = new String(db.get("queryIp".getBytes()));
		if (value.isEmpty()) {
			String Accept = "";
			String msg[] = queryIp.split("\\.");
			for (int i = 0; i < msg.length; i++) {
				if (msg[i].length() == 2) {
					String a = "0" + msg[i].substring(0, msg[i].length());
					msg[i] = a;
				}
				if (msg[i].length() == 1) {
					String b = "00" + msg[i].substring(0, msg[i].length());
					msg[i] = b;
				}
				if (i == msg[i].length() - 1) {
					Accept = Accept + msg[i];
				} else {
					Accept = Accept + msg[i] + ".";
				}
			}
			IpLocation ipln = ipDI.findByIpLocation(Accept.trim());
			if (queryIp.length() == ipln.getIp_start().length()) {
				return ipln;
			}
			Map map = new HashMap();
			map.put("country", ipln.getCountry());
			map.put("province", ipln.getProvince());
			map.put("city", ipln.getCity());
			map.put("county", ipln.getCounty());
			Options options = new Options();
			options.createIfMissing(true);
			db = org.fusesource.leveldbjni.JniDBFactory.factory.open(
					new File("example"), options);
			db.put("queryIp".getBytes(), "map".getBytes());
		} else {
				System.out.println("QueryIp value is: " + value);
				db.delete("QueryIp".getBytes());
			} 
		}catch (Exception ex) {
				ex.printStackTrace();
			} finally {
				if (db != null) {
					try {
						db.close();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		return db.getProperty(queryIp);
	}
	
}



import java.io.File;

import org.iq80.leveldb.DB;
import org.iq80.leveldb.Options;

public class LeveDBtest {

	private DB db = null;
	
	public LeveDBtest() {
		
	}
	
	public void test() {
		Options options = new Options();
		options.createIfMissing(true);
		try {
			db = org.fusesource.leveldbjni.JniDBFactory.factory.open(
					new File("example"), options);
			db.put("Tampa".getBytes(), "rocks".getBytes());
			String value = new String(db.get("Tampa".getBytes()));
		if (value.isEmpty()) {

		} else {
				System.out.println("Tampa value is: " + value);
				db.delete("Tampa".getBytes());
			} 
		}catch (Exception ex) {
				ex.printStackTrace();
			} finally {
				if (db != null) {
					try {
						db.close();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}

	public static void main(String[] args) {
		LeveDBtest leveDB = new LeveDBtest();
		leveDB.test();
	}
}



import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.dropwizard.Configuration;
import io.dropwizard.db.DataSourceFactory;

public class TestIpConfiguration extends Configuration {

	@Valid
	@NotNull
	@JsonProperty
	private DataSourceFactory ipDB = new DataSourceFactory();

	public DataSourceFactory getIpDBFactory() {
		return ipDB;
	}
}



public class IpLocation {

	private String ip_start;
	private String ip_end;
	private String country;
	private String province;
	private String city;
	private String county;

	public IpLocation() {

	}

	public IpLocation(String country, String province, String city,
			String county) {
		this.country = country;
		this.province = province;
		this.city = city;
		this.county = county;
	}

	public IpLocation(String ip_start, String ip_end, String country,
			String province, String city, String county) {
		this.ip_start = ip_start;
		this.ip_end = ip_end;
		this.country = country;
		this.province = province;
		this.city = city;
		this.county = county;
	}

	public String getIp_start() {
		return ip_start;
	}

	public void setIp_start(String ip_start) {
		this.ip_start = ip_start;
	}

	public String getIp_end() {
		return ip_end;
	}

	public void setIp_end(String ip_end) {
		this.ip_end = ip_end;
	}

	public String getCountry() {
		return country;
	}

	public void setCountry(String country) {
		this.country = country;
	}

	public String getProvince() {
		return province;
	}

	public void setProvince(String province) {
		this.province = province;
	}

	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}

	public String getCounty() {
		return county;
	}

	public void setCounty(String county) {
		this.county = county;
	}
}



import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.customizers.Mapper;

public abstract class IpDBInterface {

	@SqlQuery("select * from ip_location where ip_start < :queryIp and ip_end > :queryIp")
	@Mapper(IpLocationMappers.class)
	public abstract IpLocation findByIpLocation(@Bind("queryIp") String queryIp);
}



import java.util.HashMap;
import java.util.Map;

import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.HEAD;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import org.iq80.leveldb.DB;
import com.codahale.metrics.annotation.Timed;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Optional;

@Path("/getIpInfo")
@Produces(MediaType.APPLICATION_JSON)
public class FackU {

	private DB db;
	private IpDBInterface ipDI;
	private ObjectMapper mapper = new ObjectMapper();
	
	
	public FackU(IpDBInterface ipDI, DB db) {
		this.ipDI = ipDI;
		this.db = db;
	}
	
	@Path("/g")
	@GET
	@Timed
	public Object test(@QueryParam("ipAddr") Optional<String> ipAddr) throws Exception {

		String queryIp = ipAddr.get();
		System.out.println("queryIp ======================>>> " + queryIp);

		byte[] bvle = db.get("queryIp".getBytes());
		System.out.println("bvle = " + bvle);
		String value = "";
		if (bvle == null) {
			String Accept = "";
			String msg[] = queryIp.split("\\.");
			for (int i = 0; i < msg.length; i++) {
				if (msg[i].length() == 2) {
					String a = "0" + msg[i].substring(0, msg[i].length());
					msg[i] = a;
				}
				if (msg[i].length() == 1) {
					String b = "00" + msg[i].substring(0, msg[i].length());
					msg[i] = b;
				}
				if (i == msg[i].length() - 1) {
					Accept = Accept + msg[i];
				} else {
					Accept = Accept + msg[i] + ".";
				}
			}
			//Accept = "001.128.045.101";
			IpLocation ipln = ipDI.findByIpLocation(Accept.trim());
			if (queryIp.length() == ipln.getIp_start().length()) {
				return ipln;
			}
			Map map = new HashMap();
			map.put("country", ipln.getCountry());
			map.put("province", ipln.getProvince());
			map.put("city", ipln.getCity());
			map.put("county", ipln.getCounty());
			db.put("queryIp".getBytes(), mapper.writeValueAsBytes(map));
			bvle = db.get("queryIp".getBytes());
			value = new String(bvle);
		} else {
			value = new String(bvle);
			System.out.println("get queryIp from cache DB: " + value);
		} 
		return value;
	}
	
	@Path("/p")
	@POST
	@Timed
	public void abc() {
		System.out.println("this is post!");
	}

	@Path("/d")
	@DELETE
	@Timed
	public void delete(){
		System.out.println("this is delete!");
	}
	
	@Path("/h")
	@HEAD
	@Timed
	public void head(){
		System.out.println("this is head!");
	}
}

yml文件内容:
ipDB: 
  driverClass: com.mysql.jdbc.Driver 
  user: root 
  password: 123456 
  url: jdbc:mysql://ip:端口/数据库?useUnicode=true&characterEncoding=utf8&connectionCollation=utf8_general_ci 
  properties:
    charSet: UTF-8


你可能感兴趣的:(自己跟前辈学写的小插件)